在我的编辑视图中,信息似乎没有显示在文本框中的表单上。以下是我在控制器中的编辑功能的样子:
[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>
}
答案 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的视图。
希望这有帮助。