[英]Asp.net MVC 5 - View Posting Null Data to Controller
我正在开发一个使用视图模型将数据传递给视图的应用程序,但是当我尝试保存用户对数据所做的更改并将其发送回控制器以进行处理并存储在数据库中时,我为我的视图模型中的所有内容获取空值。 我在这里尝试了各种其他问题,但我找到的答案都无法解决这个问题。 我认为这与我使用 ListBox 来显示一些数据有关,但我对 ASP.net MVC 5 还很陌生,我不太确定我需要在这里做什么。
下面是我的视图模型、控制器中的相关部分和视图的代码。
查看模型
public class OrganizationViewModel
{
public Organization Organization { get; set; }
public IEnumerable<SelectListItem> RelatedContacts { get; set; }
}
将数据从控制器发送到视图
[HttpGet]
public ActionResult Edit(Organization organization)
{
IEnumerable<SelectListItem> contactsList = GetContacts(organization);
var viewModel = new OrganizationViewModel()
{
Organization = organization,
RelatedContacts = contactsList
};
return View("Edit", viewModel);
}
从视图接收数据
[HttpPost]
public ActionResult SaveOrganization(OrganizationViewModel organizationViewModel)
{
organizationViewModel.Organization.Id = (int)TempData["Id"];
organizationViewModel.Organization.LastEdited = DateTime.Today;
organizationViewModel.Organization.DateAdded = (DateTime)TempData["DateAdded"];
TempData.Clear();
if (ModelState.IsValid)
{
organizationRepository.SaveOrganization(organizationViewModel.Organization);
return RedirectToAction("Index", "Organization");
}
IEnumerable<SelectListItem> contactsList = GetContacts(organizationViewModel.Organization);
var viewModel = new OrganizationViewModel()
{
Organization = organizationViewModel.Organization,
RelatedContacts = contactsList
};
return View("Edit", viewModel);
}
编辑视图
<div class="panel">
<div class="panel-heading">
<h3>Editing @(Model.Organization.Name)</h3>
</div>
@using (Html.BeginForm("SaveOrganization", "Organization", FormMethod.Post))
{
<div class="panel-body">
@Html.HiddenFor(m => Model.Organization.Name)
<div class="row">
<div class="col-md-3 form-group">
<label>Organization Name</label>
@Html.TextBox("Name", null, new { @class = "form-control" })
</div>
<div class="col-md-3 form-group">
<label>Address</label>
@Html.TextArea("Address", null, new { @class = "form-control" })
</div>
</div>
<div class="row">
<div class="col-md-3 form-group">
<label>Related Contacts</label>
@Html.ListBox("RelatedContacts", Model.RelatedContacts, new { @class = "form-control", size = 10 })
</div>
<div class="col-md-3 form-group">
<label>Custom Fields</label>
<br />
<input type="button" value="Add New Field" class="btn btn-default" />
</div>
</div>
<div class="row">
<div class="col-md-12 form-group">
<label>Notes</label>
@Html.TextArea("Notes", null, 10, 500, new { @class = "form-control", @style = "width: 100%; max-width: 100%;" })
</div>
</div>
</div>
<div class="panel-footer">
<input type="submit" value="Save" class="btn btn-primary" />
@Html.ActionLink("Cancel and return to List", "CancelEditOrAdd", null, new { @class = "btn btn-default" })
</div>
}
为任何偶然发现并希望看到我根据@Stephen Muecke 的评论所做的确切更改的人回答我自己的问题。
将所有@html.something()s
更改为@html.somethingfor()s
以解决在视图模型中未收到组织的回发数据的问题,然后我在视图模型中创建了一个新属性以与ListBox 中的选定索引,现在读取@Html.ListBoxFor(m => m.SelectedIndexes, Model.RelatedContacts, ...)
。 我现在获得了所有正确的回发数据,并且可以将选定的索引与组织的相关联系人相关联。
编辑:还更改了我的视图模型以包含我的组织类的属性,而不是实际的组织对象本身作为属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.