如何将模型传递给@html.partial?

时间:2016-12-28 07:06:02

标签: asp.net-mvc razor

我在主视图中使用了IEnumerable,在局部视图中使用了单个模型对象。

我正在进行CRUD操作:每行都有编辑/详细信息/删除按钮。

以下是我的CSHTML代码:

@model IEnumerable<jQuery_CRUD.DAL.User>
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Address)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ContactNo)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.UserId }, new { @class = "modal-with-form btn btn-default" ,href = "#modalEdit" }) |
            @Html.ActionLink("Details", "Details", new { id = item.UserId }, new { @class = "modal-with-form btn btn-default", href = "#modalDetails" }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.UserId }, new { @class = "modal-with-form btn btn-default", href = "#modalDelete" })             



            <div id="modalEdit" class="modal-block modal-block-primary mfp-hide">
                @Html.Partial("Edit", item)
            </div>

            <div id="modalDetails" class="modal-block modal-block-primary mfp-hide">
                @Html.Partial("Details", item)
            </div>


            <div id="modalDelete" class="modal-block modal-block-primary mfp-hide">
                @Html.Partial("Delete", item)
            </div>




        </td>
    </tr>

单击编辑/详细信息/删除仅影响表格中的第一行。

我使用的局部视图中的模型是:

@model jQuery_CRUD.DAL.User

我如何克服这个问题?

我的控制器

 public ActionResult Edit(int id = 0)
    {
        User user = db.User.Find(id);
        if (user == null)
        {
            return HttpNotFound();
        }
        return PartialView(user);
    }

    //
    // POST: /User/Edit/5

    [HttpPost]
    public ActionResult Edit(User user)
    {
        if (ModelState.IsValid)
        {
            db.Entry(user).State = EntityState.Modified;
            db.SaveChanges();
            TempData["Message"] = "Data has been updated successfully!";
            return RedirectToAction("Index");
        }
        return View(user);
    }

1 个答案:

答案 0 :(得分:0)

就使用MVC模式而言,您必须将数据从控制器(C)传递到视图(V),通常是在从模型(M)获取之后。因此,您必须使用此方法对控制器进行编码:

public ActionResult your_partial_view() 
{
  // Do your magic. Obtain data from model, handle them and after pass them to the view (Partial view in this case)
  return PartialView("your_partial_view", jQuery_CRUD.DAL.User);
}

您也应该在模型中定义类jQuery_CRUD.DAL.User。

控制器的名称必须与模式中的View-layer-folders中的文件夹相同。该方法必须是您的视图或部分视图的名称。

如果你想了解它,我推荐你这些tutos:official´s tutos

另一方面,你在我的git中有一些工作演示,请查看:MVC working´s demo

让我知道你可能有任何疑问。

干杯。