微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 自定义表面控制器Umbraco问题

首先,我想澄清一点,我只是在学习ASP MVC和Umbraco :).可能有非常新手的错误.
我正在努力建立一个采访系统.在互联网上搜索,我找到了一个改变口味的例子.
我创建了一个用于测试的空项目,这就是我所拥有的.

Umbraco管理员

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的内容

enter image description here

在Visual Studio

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;
        }

    }
}

模型

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“民意调查”

@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>

错误

enter image description here

编辑

新问题

enter image description here

解决方法

从您的错误您获得与Polls名称空间和Umbraco.Web.PublishedContentModels.Polls名称间的名称空间冲突.您可以更改名称空间以匹配Umbraco(不推荐),也可以尝试将名称空间更改为与Umbraco名称空间不冲突的唯一名称空间.

类似于:MyRootNamespace.Polls,您将使用自己的自定义命名空间替换MyRootNamespace.

SurfaceController

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

楷模

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

    public class Pollviewmodel {...}
}

PartialView“民意调查”

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

<div>
    ...
</div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐