2016-04-05 34 views
4

ile sorun, ben sadece ASP MVC ve Umbraco :) öğreniyorum açıklığa kavuşturmak istiyorum. Çok acemi hataları olabilir. Bir röportaj sistemi kurmaya çalışıyorum. İnternette arama yaparken, tadımı değiştirdiğim bir örnek buldum. Test için boş bir proje oluşturdum ve sahip olduğum tek şey bu. Visual StudioÖzel yüzey denetleyicisi Umbraco

Umbraco yönetici

DocumentTypes 
    Answer // --> Without template (for the moment) - No have properties (for the moment) 
    Poll // --> Without template (for the moment) - No have properties (for the moment) - Have many "Answer" child and "Active" bool property 
    Polls // --> Without template (for the moment) - No have properties (for the moment) - Have many "Poll" child 

PartialView 
    Polls 

Umbraco içerik

enter image description here

Umbraco CMS (NuGet) 

Controllers 
    PollController 

Models 
    PollViewModel 
    Answer 

SurfaceController

namespace Polls.Controllers 
{ 
    public class PollsController : SurfaceController 
    { 

     [HttpPost] 
     public ActionResult Submit(PollViewModel model) 
     { 

      // Do something... 

      return RedirectToCurrentUmbracoPage(); 
     } 

     public ActionResult Index() 
     { 
      var testPage = Umbraco.Content(CurrentPage.Id); 
      var questions = new List<PollViewModel>(); 

      foreach (var currentPoll in testPage.Where("Active")) 
      { 
       questions.Add(new PollViewModel { ID = currentPoll.ID, Title = currentPoll.Name.ToString(), Answers = AnswerList(currentPoll.ID) }); 
      } 

      return PartialView("~/Views/Polls.cshtml", questions); 
     } 

     private List<Answer> AnswerList(int myQuestionID) 
     { 
      var questionPage = Umbraco.Content(myQuestionID); 
      var answers = new List<Answer>(); 

      foreach (var currentAnswer in questionPage.Children) 
      { 
       answers.Add(new Answer { ID = currentAnswer.ID, Text = currentAnswer.Name.ToString() }); 
      } 

      return answers; 
     } 

    } 
} 

model

namespace Polls.Models 
{ 
    public class Answer 
    { 
     public int ID { get; set; } 
     public string Text { get; set; } // --> No use for now 
    } 
} 

namespace Polls.Models 
{ 
    public class PollViewModel 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } // --> No use for now 
     public List<Answer> Answers { get; set; } 

    } 
} 

PartialView "anketi"

@model IEnumerable<Polls.Models.PollViewModel> 

<div> 
    @using (Html.BeginUmbracoForm<Polls.Controllers.PollsController>("Submit")) 
    { 

     foreach (var item in Model) 
     { 
      <div> 
       @Html.Hidden(item.ID.ToString()) 
       <p> 
        <strong>@item.Title</strong> 
       </p> 
       @{ 
      foreach (var answerItem in item.Answers) 
      { 
       <div> 
        @Html.RadioButton(item.Title, answerItem.ID, new { @id = answerItem.ID }) 
        @Html.Label(answerItem.Text, new { @for = answerItem.ID }) 
       </div> 
      } 
       } 
      </div> 
     } 

     <div> 
      <button type="submit">Send...</button> 
     </div> 

    } 
</div> 

hata

enter image description here

DÜZENLEME

Yeni sorun hata itibaren enter image description here

cevap

1

Sen Polls ad ile ad çakışması ve Umbraco.Web.PublishedContentModels.Polls ad alıyorsanız. Umbraco (TAVSİYE EDİLMEMİŞ) ile eşleşmesi için ad alanlarını değiştirin ya da ad alanlarınızı Umbraco'nun ad alanlarıyla çakışmayacak benzersiz bir şeye dönüştürmeyi deneyin.

MyRootNamespace.Polls gibi bir şey, MyRootNamespace'u kendi özel ad alanınızla değiştirirsiniz.

SurfaceController

namespace MyRootNamespace.Polls.Controllers { 
    public class PollsController : SurfaceController {...} 
} 

Modelleri

namespace MyRootNamespace.Polls.Models { 
    public class Answer {...} 

    public class PollViewModel {...} 
} 

PartialView "Anketler"

@model IEnumerable<MyRootNamespace.Polls.Models.PollViewModel> 

<div> 
    ... 
</div> 
+0

Mükemmel, ama şimdi yeni bir sorunum var. Düzenlemeye git. Bu yaygın bir sorundur (google'da birçoğu) ancak çözemiyorum. – avechuche

+0

Model ciltleyicinin devre dışı bırakılmasıyla ilgili ikinci cevabı kontrol edin. – Nkosi

0

Umbraco.Web.PublishedContentModels ad alanı, Umbraco'nun yeni bir özelliği olan Model Builder'ı canlandırabileceksiniz.Etkinleştirilirse, görünümlerinizde kullanmak üzere her bir doküman türünüz için güçlü yazılan modeller alabilirsiniz. hata mesajı dayanarak

, Umbraco görüşünüz modeliyle bir çatışma yol açacak şekilde doküman türünden üretilen Polls modelini kullanmaya çalışıyor. Bu otomatik olarak oluşturulan modelleri kullanmak niyetinde sürece

, sana ekleyerek veya web.config dosyasında bu satırı güncelleyerek özelliği devre dışı önermek: Tam olarak soruna neden olan referans net değil

<add key="Umbraco.ModelsBuilder.Enable" value="false" /> 

, ancak diğer deneyebileceğiniz bir şey, örneğin görünümünüzün bir düzenine sahipse, görünüm modelinizi yeniden adlandırmak veya herhangi bir ana görünümüne yatırım yapmaktır.

İlgili konular