我正在使用ASP.net MVC 3。
这是我的代码:
<tr class="print-hide" id="NewExpenseTypeRow">
<td class="text">Add Expense Type</td>
<td class="form-values">@Html.EditorFor(m => m.Description)</td>
<td class="form-values">@Html.DropDownListFor(m => m.Category, Model.Categories.Select(c => new SelectListItem { Text = c }))</td>
<td></td>
<td>
@using (Html.BeginForm("UpdateExpenseType", "Grants", FormMethod.Post, new { id = "UpdateExpenseType" }))
{
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Mode)
@Html.HiddenFor(m => m.GrantId)
<input type="submit" value="Save" data-values="#NewExpenseTypeRow .form-values input" />
}
</td>
</tr>
即使我使用class =&#34; form-values&#34;,DropDownListFor中的值也没有进入控制器。控制器只获取该字段的默认值。
如何将DropDownListFor值中的值输入控制器?
答案 0 :(得分:1)
你不能没有javascript干预。标准HTML规则规定您要发布的任何内容都必须包含在<form>
元素中。这只是简单的HTML发布101。
此外,class="form-values"
与表单发布无关(除非您的javascript框架使用)。
所以,只需将你的BeginForm移动......
@using (Html.BeginForm("UpdateExpenseType", "Grants", FormMethod.Post, new { id = "UpdateExpenseType" })) {
<tr class="print-hide" id="NewExpenseTypeRow">
<td class="text">Add Expense Type</td>
<td class="form-values">@Html.EditorFor(m => m.Description)</td>
<td class="form-values">@Html.DropDownListFor(m => m.Category, Model.Categories.Select(c => new SelectListItem { Text = c }))</td>
<td></td>
<td>
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Mode)
@Html.HiddenFor(m => m.GrantId)
<input type="submit" value="Save" data-values="#NewExpenseTypeRow .form-values input" />
</td>
</tr>
}
这是在没有javascript hacks的情况下执行此操作的基本方法。
如果你想变得讨厌,你可以使用Javascript挂钩到表单发布事件,在页面上捕获你想要的元素数据,将它添加到表单数据变量,并通过javascript提交它,最后重定向页面。
这比我上面刚刚建议的更加努力。
data-values="#NewExpenseTypeRow .form-values input"
你必须使用一些nuget package / javascript / jquery框架试图自动为你连接,类似于我上面的选项2,使用自定义javascript为你做这个。
唐&#39;吨。很可能是你正在使用的javascript中的一个错误(你不知道你正在使用它)无法识别这些字段。
再一次,不要这样做。我不知道你试图使用什么javascript,如果你想继续使用javascript,这是你的问题javascript / plugin / jquery的问题。
唐&#39;吨
1)摆脱data-values="#NewExpenseTypeRow .form-values input"
2)按照上面的步骤将@using (Html.BeginForm("UpdateEx...
向上移动以包围整个表单。它不会伤害任何东西,<form>
标签不用于样式。
少了我的朋友。
数据值和表单ID的命名约定使我认为您正在使用某些模板或更大的解决方案。几乎就像有一些ajax在继续。
我认为你的问题在于你用来捕获输入字段的任何javascript代码。
请注意,@Html.DropDownListFor()
会生成<select>
,而不是<input>
字段。那么您是否需要更改提交按钮上的data-values
以捕获<select>
以及<input>
?像这样:
data-values="#NewExpenseTypeRow .form-values input,#NewExpenseTypeRow .form-values select"
我猜你正在使用的javascript框架使用这个data-values
属性作为jquery选择器从中获取数据。其中,您可以将jquery选择器中的多个与逗号组合在一起。所以,这可能有用。
虽然不知道你用什么javascript来获取数据值属性以及它是如何被使用的,但这只是猜测。