Asp.net MVC 3:控制器中的模型是空的吗?
发布时间:2020-12-16 06:30:38 所属栏目:asp.Net 来源:网络整理
导读:我有一个表单,我只需要在几个实体之间进行选择. 所以这就是我所做的: 创建了一个视图模型: public class EntityChooserModel { public IEnumerableEntity AvailableEntities { get; set; } public int SelectedId; } 我在控制器中有两个动作,一个是[HTTPPo
我有一个表单,我只需要在几个实体之间进行选择.
所以这就是我所做的: 创建了一个视图模型: public class EntityChooserModel { public IEnumerable<Entity> AvailableEntities { get; set; } public int SelectedId; } 我在控制器中有两个动作,一个是[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 }); } . [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); } 强类型视图: @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> 问题是,当我在第二个模型中收到数据时,我有一个空对象.该集合为空,id设置为默认值(0). 怎么了?我无法找到我在这个上错过的东西. 这是我第一次做一个不是ForModel()的mvc表单,而且我第一次使用下拉列表 解决方法
您< form>的唯一输入元素contains是一个下拉列表,在POSTed时仅将所选值发送到服务器.这解释了您的AvailableEntities集合属性为空的原因.
至于为什么SelectedId字段为空,这是因为您已将其定义为字段而不是属性.默认模型绑定器仅适用于属性.因此,如果您希望填充它,则必须将其定义为属性: public int SelectedId { get; set; } 就AvailableEntities属性而言,您可以使用所选的id在POST操作中从存储库中填充它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 即使控件被隐藏,ASP.NET中的验证仍然会激活吗?
- asp.net-mvc – Actionresult vs JSONresult
- asp.net-mvc – 如何在使用类型化视图时在ActionFilterAttr
- asp.net-mvc-3 – 如何在asp.net mvc3中添加一组单选按钮
- 如何设置已禁用的ASP.NET按钮的样式
- asp.net-mvc – 已经使用相同的参数类型定义了一个名为“Cr
- asp.net TreeView与XML三步生成列表树
- asp.net-mvc-4 – 高级WebGrid教程或解决方案
- asp.net-mvc – 为什么要使用视图模型?
- 如何在asp.net表单身份验证中执行滑动和绝对超时
推荐文章
站长推荐
热点阅读