ASP.NET MVC编辑表单不保留数据

时间:2011-12-12 16:06:31

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

在我的编辑视图中,信息似乎没有显示在文本框中的表单上。以下是我在控制器中的编辑功能的样子:

[HttpGet]
[Authorize(Roles = "Admin")]
public ActionResult Edit(int id)
{
    var logic = new ContactBUS();
    var user = logic.GetContact(id);
    var mUser = Membership.GetUser(user.Username);
    bool memUserExists = doesUserExist(mUser);

    if (memUserExists)
    {
        var model = new RoleListViewModel
        {
            AllRoles = Roles.GetAllRoles().ToList()
        };

        return View(model);
    }

    return View(logic.GetContact(id));
}

[HttpPost]
[Authorize(Roles = "Admin")]
public ActionResult Edit(Contact contact)
{
    var logic = new ContactBUS();
    if (ModelState.IsValid)
    {
        logic.EditContact(contact);
        return RedirectToAction("List");
    }
    else
        return View(contact);
    }
}

知道为什么会这样吗?任何帮助将不胜感激。

Edit.cshtml

@model ContactWeb.Models.RoleListViewModel

<h2>Edit</h2>

<div style="float:left;width:350px;">
@{Html.RenderPartial("Form", new ContactWebLibrary.Contact());}
</div>

和Form.cshtml

@model ContactWebLibrary.Contact

@using (Html.BeginForm()) {
    <input type="hidden" value="@Model.Id" />
    <fieldset id="ContactEditor">
        <legend>Fields</legend>

        <div>
        @Html.LabelFor(c=>c.FirstName, "First Name")
        @Html.TextBoxFor(c=>c.FirstName)
        @Html.ValidationMessageFor(c=>c.FirstName)
        </div>

        <div>
        @Html.LabelFor(c=>c.LastName, "Last Name")
        @Html.TextBoxFor(c=>c.LastName)
        @Html.ValidationMessageFor(c=>c.LastName)
        </div>

        <div>
        @Html.LabelFor(c=>c.Email)
        @Html.TextBoxFor(c=>c.Email)
        @Html.ValidationMessageFor(c=>c.Email)
        </div>

        <div>
        @Html.LabelFor(c=>c.Username)
        @Html.TextBoxFor(c=>c.Username)
        @Html.ValidationMessageFor(c=>c.Username)
        </div>

        <p style="clear:both">
            <input type="submit" value="@(Model.Id == 0 ? "Create" : "Edit" )" />
        </p>
    </fieldset>

}

1 个答案:

答案 0 :(得分:0)

如果memUserExists为true,则将新的RolesListViewModel传递给Edit视图。每次渲染此局部视图时,这会将全新的Contact模型传递给局部视图:

@{Html.RenderPartial("Form", new ContactWebLibrary.Contact());}

因此,partial中使用的联系人不会包含任何要显示的信息,因此,不会显示任何值。

logic.GetContact(id)是否返回RoleListViewModel?否则,当memUserExists为false时,我不认为返回编辑视图时以下行会起作用:

return View(logic.GetContact(id));

而且,[HttpPost]中的以下行:

return View(contact);

这会将Contact对象传递给期望RoleListViewModel的视图。

希望这有帮助。