如果你想充分利用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