如何在回发期间在asp.net mvc中保留部分视图模型数据

时间:2013-07-12 04:55:13

标签: asp.net asp.net-mvc-3

我正在部分查看包含部门信息的部门。我有员工的页面视图。在员工视图中我使用部门视图来显示员工部门。我的员工模型如下

class Employee
{
  public string EmployeeName{get;set};
  public Department EmployeeName{get;set};

}

class Department
{
  public string DepartmentName{get;set};
}

我在员工页面视图上提交了按钮。 当我提交员工视图时,我将Department对象视为null。 你能否告诉我如何在回发期间获得儿童部门模型。 Coltroller代码

[HttpGet]
        public ActionResult Employee2()
        {
            Employee e = new Employee();
            e.EmployeeName = "Prashant";
            e.Department = new Department() { DepartmentName = "Phy" };

            return View(e);
        }

        [HttpPost]
        public ActionResult Employee2(Employee e)
        {

            return View(e);
        }

浏览

@model MvcApplication2.Models.Department

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

    <fieldset>
        <legend>Department</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.DepartmentName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DepartmentName)
            @Html.ValidationMessageFor(model => model.DepartmentName)
        </div>


    </fieldset>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

员工

@model MvcApplication2.Models.Employee
@{
    ViewBag.Title = "Employee";
}
<h2>
    Employee</h2>
@using (Html.BeginForm("Index","Home"))
{

    <fieldset>
        <legend>Employee</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.EmployeeName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmployeeName)
            @Html.ValidationMessageFor(model => model.EmployeeName)
        </div>
        @Html.Partial("Department", Model.Department)
        <p>
            <input type="submit" value="EmployeeSave" />
        </p>
    </fieldset>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

2 个答案:

答案 0 :(得分:5)

先尝试搜索。之前已经多次询问过这个问题。

这是一种方法:

mvc partial view post

摘要:使用自己的提交按钮将每个部分包装在多个表单标记中。

但是这个看起来更像是你所追求的:

Post a form with multiple partial views

使用editortemplates代替partials。

您遇到的问题是,如果没有为您的控制器正确命名您的DepartmentName文本框以便阅读它。您的POST将为EmployeeName=Prashant&DepartmentName=Phy,因此Departmentnull,因此错误。

答案 1 :(得分:4)

试试这个,

您还更改了“部门模型”实体名称。  和部门在Shared / EditorTemplates中查看位置。

查看:

@using (Html.BeginForm("Employee", "Content"))
{
@Html.EditorFor(model => model.dptEmployeeName.DepartmentName)
    <fieldset>
        <legend>Employee</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.EmployeeName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.EmployeeName)
            @Html.ValidationMessageFor(model => model.EmployeeName)
        </div>
        @Html.EditorFor(model => model.dptEmployeeName.DepartmentName) //This is partial view

        <p>
            <input type="submit" value="EmployeeSave" />
        </p>
    </fieldset>
}

控制器:

[HttpPost]
        public ActionResult Employee(Employee e,FormCollection frm)
        {
            var asd = frm["dptEmployeeName.DepartmentName"];

            return View(e);
        }