如果你想充分利用mvc3验证,请考虑这种方法。
型号
public class MultiValueViewModel
{
[Required]
public string TextValue { get; set; }
[Required]
public bool? BooleanValue { get; set; }
public MultiValueType ValueType { get; set; }
}
public enum MultiValueType
{
Text,
Boolean
}
查看
@model MultiValueViewModel
@Html.DropDownListFor(m => m.ValueType, new SelectList(new[]
{
MultiValueType.Text,
MultiValueType.Boolean
}), new { @id = "multi_value_dropdown" })
<p>
<div data-type="@MultiValueType.Text" class="multi-value-pane">
@Html.EditorFor(m => m.TextValue)
</div>
<div style="display: none" data-type="@MultiValueType.Boolean" class="multi-value-pane">
@Html.DropDownListFor(m => m.BooleanValue, new SelectList
(new [] {
new SelectListItem { Text = "Yes", Value = "true"},
new SelectListItem { Text = "No", Value = "false"}
}, "Value", "Text"), optionLabel: "[Not Set]")
</div>
</p>
的Javascript:
<script type="text/javascript">
$(function() {
$("#multi_value_dropdown").change(function() {
var value = $(this).val();
$(".multi-value-pane").each(function() {
$(this).css("display", value == $(this).attr("data-type") ? "block" : "none");
});
});
})
内部控制器,接收MultiValueViewModel值(单独或母模内el),并根据选定的ValueType保存到数据库。请注意,如果您需要跳过对隐藏字段的验证(例如:隐藏),则需要jquery.validate版本1.9。
你可以发布代码吗?您只需更改HTML即可更改输入类型。没有代码很难回答这个问题。 – 2012-02-17 03:48:59
@natemrice没有可发布的代码。我还没有写下这个问题,我想问一个问题,让我不要走上一条可能会让人痛苦的道路。 – Andy 2012-02-17 16:20:07
@你想以表格的形式提交吗?没什么大不了。只需将编辑字段放在表单中,它们将全部发送。我会更新我的答案 – 2012-02-19 19:48:56