asp.net-mvc – 绑定到MVC中的SelectList
|
再次遇到一个“这不应该是这个? 问题:我想在MVC中使用一个表单来创建一个对象.对象的一个元素是一组有限的选择 – 一个下拉列表的完美候选者. 但是如果我在我的模型中使用一个SelectList,并在我的View中使用一个下拉列表,然后尝试将Model发回我的Create方法,我会收到错误“Missing Method Exception:No Parameterless constructor for this object”.探索MVC源代码,似乎为了绑定到模型,Binder必须能够先创建它,并且它不能创建SelectList,因为它没有默认构造函数. 以下是简化代码: public class DemoCreateViewModel
{
public SelectList Choice { get; set; }
}
对于控制器: //
// GET: /Demo/Create
public ActionResult Create()
{
DemoCreateViewModel data = new DemoCreateViewModel();
data.Choice = new SelectList(new string[] { "Choice1","Choice2","Choice3" });
ViewData.Model = data;
return View();
}
//
// POST: /Demo/Create
[HttpPost]
public ActionResult Create(DemoCreateViewModel form)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
而对于视图: <fieldset>
<legend>Fields</legend>
<%= Html.LabelFor(model => model.Choice) %>
<%= Html.DropDownListFor(model => model.Choice,Model.Choice) %>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
现在,我知道我可以通过退出10码并打开这个工作:绕过模型绑定并返回到FormCollection,并自动验证并绑定所有的字段,但是必须要简单一些.我的意思是说,这是一个简单的要求.有没有办法使这项工作在MVC ModelBinding架构中?如果是这样,那是什么?如果没有,怎么来? 编辑:嗯,我的脸上有蛋,但也许这会帮助别人.我做了一些更多的实验,发现一个似乎有效的简单解决方案. 提供一个简单的值(字符串或整数,取决于您的选择列表值类型),并将其命名为绑定到的模型元素.然后提供第二个元素作为选择列表,并将其命名为其他内容.所以我的模型变成了 public class DemoCreateViewModel
{
public string Choice { get; set; }
public SelectList Choices { get; set; }
}
然后View中的DropDownListFor语句变为: <%= Html.DropDownListFor(model => model.Choice,Model.Choices) %> 当我这样做时,提交按钮将表单中所做的选择正确地绑定到字符串Choice,并将模型提交回第二个Create方法. 解决方法这是一种方法:@Html.DropDownListFor(model => model.Choice,ViewBag.Choices as SelectList,"-- Select an option--",new { @class = "editor-textbox" })
请注意,我使用ViewBag来包含我的SelectList.这样,当您发回时,客户端不会将整个选择列表发送到服务器作为模型的一部分. 在您的控制器代码中,您只需要设置查看包: ViewBag.Choices = new SelectList(.... (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将ASP.NET MVC布局应用于Jquery.Mobile页面
- asp.net-mvc – knockout下拉列表将选择传递给MVC5中的模型
- asp.net – System.DirectoryServices – 服务器不可操作
- asp.net-mvc – 如何将相同URL的GET和DELETE请求路由到不同
- ASP.NET Web App和ASP.NET MVC 3 Empty Web App之间的区别?
- asp.net – Visual Studio需要Windows 7中提升的权限
- asp.net – 什么原因导致“无法注销UpdatePanel”错误?
- asp.net-mvc-3 – 为什么我的自定义HTML助手结果得到html编
- asp.net – 如何防止网页上的CSS缓存?
- 认证 – WebApi ActionFilterAttribute,HttpActionContext访
- asp.net-mvc – 如何在我自己的自定义助手中使用
- asp.net-mvc – Razor视图引擎优于其他视图引擎的
- asp.net-mvc – 如何从运行时的强类型列表框架视
- asp.net-mvc – 页面的ValidateRequest设置可以被
- asp.net – 导致GridView无效回发的TemplateFiel
- 如何配置asp.net与.net 4.5
- IIS 7中的应用程序池不显示.NET Framework 3.5
- asp.net – Azure服务架构与Docker一样吗?
- asp.net – 程序或函数期望未提供的参数
- asp.net-mvc-3 – 使用ViewData将字符串从Contro
