J4N*_*J4N 4 forms asp.net asp.net-mvc asp.net-mvc-3
我有一个表单,我只需要在几个实体之间进行选择.
所以这就是我所做的:
创建了一个视图模型:
public class EntityChooserModel
{
public IEnumerable<Entity> AvailableEntities { get; set; }
public int SelectedId;
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中有两个动作,一个是[HTTPPost],一个没有.在两者中我都有一个"SessionUserData",它是会话数据,通过数据模型绑定绑定.
[Authorize]
public ActionResult EntityChooser(SessionUserData sessionData)
{
List<Entity> entities = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).ToList();
Entity entity = sessionData.IdCurrentEntity != null ? entities.Where(e => e.Id == sessionData.IdCurrentEntity).First() : entities.First();
return View(new EntityChooserModel() { SelectedId = entity.Id, AvailableEntities = entities });
}
Run Code Online (Sandbox Code Playgroud)
.
[Authorize]
[HttpPost]
public ActionResult EntityChooser( EntityChooserModel model, SessionUserData sessionData, String returnUrl)
{
if (ModelState.IsValid)
{
Entity entity = _userStore.GetRoles(User.Identity.Name).Select(ur => ur.Entity).Where(e => e.Id == model.SelectedId).First();
sessionData.IdCurrentEntity = entity.Id;
RedirectToDefaultPage(returnUrl);
}
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
强类型视图:
@model My.Full.Namespace.EntityChooserModel
@{
ViewBag.Title = "EntityChooser";
Layout = "~/Views/Shared/_LoginLayout.cshtml";
}
<div id="login-wrapper">
<div id="title">
<h1>Login</h1>
</div>
<div id="login">
@using (Html.BeginForm("EntityChooser", "Auth", FormMethod.Post, new { id = "ChooseFormId" }))
{
@Html.ValidationSummary(true, "Loggin error")
<div>
<span>Choose an entity:</span>
@Html.DropDownListFor(x => x.SelectedId, new SelectList(Model.AvailableEntities, "Id", "Name"))
</div>
<p class="right-aligned">
<a href="javascript:document.getElementById('ChooseFormId').submit();" class="adm-button">
<span class="next-btn"><span>Select</span></span></a>
</p>
<input type="submit" style="display: none" />
}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
问题是,当我在第二个模型中收到数据时,我有一个空对象.该集合为空,id设置为默认值(0).
怎么了?我无法找到我在这个上错过的东西.
这是我第一次做一个不是的mvc表格,这是ForModel()我第一次使用下拉列表
您<form>包含的唯一输入元素是单个下拉列表,该列表在POSTed时仅将所选值发送到服务器.这解释了为什么您的AvailableEntities集合属性为空.
至于SelectedId字段为空的原因,是因为您已将其定义为字段而不是属性.默认模型绑定器仅适用于属性.因此,如果您希望填充它,则必须将其定义为属性:
public int SelectedId { get; set; }
Run Code Online (Sandbox Code Playgroud)
就AvailableEntities属性而言,您可以使用所选的id在POST操作中从存储库中填充它.
| 归档时间: |
|
| 查看次数: |
3244 次 |
| 最近记录: |