1

我将 IEnumerable 传递给未绑定到 ajax 后调用的视图。

我在我的视图中构造了一个迭代来访问一些属性:

@model IEnumerable<MvcNPCA.Models.T_Contact_Medium>


@using (Ajax.BeginForm("Edit", new { medid = ViewBag.medid, cid = ViewBag.cid, parentdiv = ViewBag.parentdiv }, new AjaxOptions { UpdateTargetId = @ViewBag.parentdiv }))
    {

    for (int count = 0; count < Model.Count(); count++)
           {
                @Html.HiddenFor(model => model.ElementAt(count).T_Contact_MediumID)
                @Html.HiddenFor(model => model.ElementAt(count).MediumGegeven)
           }
    <table>
    <tr>
        <th>
            Contact
        </th>
        ...
    </tr>

@foreach (var item in Model)
{
    if (item.T_Contact_MediumID == ViewBag.medid)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Contact.Contactid)
        </td>
        <td>
            @Html.EditorFor(modelItem => item.MediumGegeven)
        </td>
    </tr>
    }
    else
    {

    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Contact.Contactid)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MediumGegeven)
        </td>
    </tr>
    }
}

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

但是在我的控制器中没有模型绑定:

    [HttpPost]
    public ActionResult Edit(IEnumerable<T_Contact_Medium> t_contact_medium, int medid, int cid, string parentdiv)
    {
        if (ModelState.IsValid)
        {
            _service.UpdateMedium(_service.GetMediumByID(medid));

            ViewBag.cid = cid;
            ViewBag.parentdiv = parentdiv;
            ViewBag.MediumId = new SelectList(_MediumEnumService.GetAll(), "MediumId", "Medium1");
            var tcrmodel = _service.GetMediumByContactID(cid);

            return PartialView("Index",tcrmodel);
        }

        ViewBag.MediumId = new SelectList(_MediumEnumService.GetAll(), "MediumId", "Medium1");
        return PartialView(t_contact_medium);
    }

我想我的控制器部分是对的。
关于我可能忽略的任何想法?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我遇到的问题有很多可能的解决方案。就我而言,我想从 IEnumerable 构建一个具有一个可编辑行的表。
因此,我可以只发送单个实体,而不是将完整的 IEnumerable 模型传递给控制器​​。
我这样做的方式是仅通过模型访问可编辑实体。

像这样:

@{var count = 0;}

@foreach (var item in Model)
{
    if (item.T_Contact_MediumID == ViewBag.medid)
    {

        @Html.HiddenFor(model => model.ElementAt(count).T_Contact_MediumID)
        @Html.HiddenFor(model => model.ElementAt(count).MediumId)
        @Html.HiddenFor(model => model.ElementAt(count).ContactId)

    <tr>
        <td>
            @Html.DisplayFor(model => model.ElementAt(count).Contact.Voornaam)
        </td>
        <td>
            @Html.DisplayFor(model => model.ElementAt(count).Medium.Medium1)
        </td>
        <td>
            @Html.EditorFor(model => model.ElementAt(count).MediumGegeven)
        </td>s
        <td>
            @Html.EditorFor(model => model.ElementAt(count).Login)
            @*Html.CheckBoxFor(modelItem => item.Login*@
        </td>
        <td>
            @Html.DisplayFor(model => model.ElementAt(count).Gebruikernaam)
        </td>
        <td>
            <input type="submit" value="opslagen" />
        </td>
    </tr>
    }
    else
    {   

    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Contact.Voornaam)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Medium.Medium1)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MediumGegeven)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Login)
            @*Html.CheckBoxFor(modelItem => item.Login*@
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Gebruikernaam)
        </td>
        <td>
            @Ajax.ActionLink("Edit", "Edit", new { medid = item.T_Contact_MediumID, cid = ViewBag.cid, parentdiv = ViewBag.parentdiv }, new AjaxOptions { UpdateTargetId = ViewBag.parentdiv }) |
            @Html.ActionLink("Details", "Details", new { id = item.T_Contact_MediumID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.T_Contact_MediumID })
        </td>
    </tr>

    }

我知道要在控制器上序列化 IEnumerable,一种方法是将您的 ienumerable 包装在自定义视图模型中。

4

0 回答 0