【问题标题】:asp.net mvc. Bind ViewModel to items in a collectionASP.NET MVC。将 ViewModel 绑定到集合中的项目
【发布时间】:2010-11-08 22:34:45
【问题描述】:

我可以像这样简单地绑定到 ViewModel 中的属性:

<%=Html.RadioButtonFor(m => m.isCool, true%>cool<br/>
<%=Html.RadioButtonFor(m => m.isCool, false)%>not cool<br/>

但是如果我想绑定到 ViewModel 中的集合项怎么办。我不确定这是否可能。这是我所拥有的:

我的视图模型:

namespace MvcApplication3.ViewModels
{
    public class cpApprovalViewModel
    {
        // My internal class
        public class PersonImage
        {
            public bool isApproved { get; set; }
            public bool isProFilePic { get; set; }
            public string uriId { get; set; }
            public string urlPath { get; set; }
        }

        public string displayName { get; set; }
        public bool isCool { get; set; }
        public List<PersonImage> personImages { get; set; }
    }
}

我的控制器:

public class cpApprovalController : Controller
    {
        //
        // GET: /cpApproval/

        public ActionResult Index()
        {
            cpApprovalViewModel viewModel = new cpApprovalViewModel();
            viewModel.displayName = "jon doe";
            viewModel.personImages = new List<cpApprovalViewModel.PersonImage>()
            {
                new cpApprovalViewModel.PersonImage(){isApproved = false, uriId = "1", isProFilePic = false, urlPath="someImagePath1.jpg" },
                new cpApprovalViewModel.PersonImage(){isApproved = false, uriId = "2", isProFilePic = false, urlPath="someImagePath2.jpg" },
                new cpApprovalViewModel.PersonImage(){isApproved = false, uriId = "3", isProFilePic = false, urlPath="someImagePath2.jpg" }
            };

            return View(viewModel);
        }

        //cpApprovalViewModel viewModel
        [HttpPost]
        public void formReceiver(cpApprovalViewModel viewModel)
        {
            // This is where I'd like to get access to the changed personImages (approved/disapproved )
        }
    }

我的观点:

<%: Model.displayName %><br /><br />
<% using (Html.BeginForm("formReceiver", "cpApproval", FormMethod.Post )){ %>

    <% foreach (var anImage in Model.personImages){ %>
        <%: Html.RadioButtonFor(model => model.personImages.Single(i => i.uriId == anImage.uriId), true, new { id = anImage.uriId })%> Approve <br />
        <%: Html.RadioButtonFor(model => model.personImages.Single(i => i.uriId == anImage.uriId), false, new { id = anImage.uriId })%> Deny <br />
        <hr />
    <% } %>

    <input type="submit" value="Save" />
<%} %>

我收到以下错误: 模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。

我想在这里做一些不可能的事情吗?我希望这是有道理的。谢谢。

【问题讨论】:

    标签: asp.net-mvc binding collections viewmodel


    【解决方案1】:

    是的 - 您尝试做的事情是可能的。

    我认为您的问题是,当您已经在 foreach 循环中拥有该项目时,您正尝试使用 .Single 再次获取相关图像。

    尝试改变:

    <%: Html.RadioButtonFor(model => model.personImages.Single(i => i.uriId == anImage.uriId), true, new { id = anImage.uriId })%> Approve <br />
    

    收件人:

    <%: Html.RadioButtonFor(model => anImage, true, new { id = anImage.uriId })%> Approve <br />
    

    有关模型绑定到集合here 的更多信息。

    【讨论】:

    • RPM,谢谢!!!您的代码不起作用,但该链接成功了!!!我不敢相信我错过了。我认为它必须在一个“for”循环中才能正常工作。
    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多