我有一个MVC3剃刀项目,我试图使用多个可重用元素构建。我有很多模型类,如下面的
public class ProductCreateModel
{
[Required]
[Display(Name = "Org")]
[UIHint("MyOrgsDropDown")]
public string orgName { get; set; }
[Required(ErrorMessage = "Select an account")]
[Display(Name = "Account")]
[UIHint("MyAccountsDropDown")]
[AdditionalMetadata("orgFieldId", "orgName")]
[AdditionalMetadata("fieldId", "accountName")]
public string accountName { get; set; }
}
我还省略了其他字段
MyAccountsDropDown.cshtml如下所示:
@{
var values = ViewData.ModelMetadata.AdditionalValues;
string orgFieldId = (string)values["orgFieldId"];
string fieldId = (string)values["fieldId"];
}
<script type="text/javascript">
$(document).ready(function () {
$("#@orgFieldId").change(function () {
var idProd = $(this).val();
$.getJSON("/JsonService/GetAccounts", { orgId: idProd },
function (myData) {
var select = $("#@fieldId");
select.empty();
$.each(myData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
});
</script>
@Html.DropDownList("", new SelectList(Enumerable.Empty<SelectListItem>(), "Value", "Text"), "---Select---", new { id = fieldId })
我的控制器方法如下所示:
[HttpGet]
public ActionResult AddProduct()
{
return PartialView("_AddProduct");
}
[HttpPost]
public ActionResult AddProduct(ProductCreateModel model)
{
if (!ModelState.IsValid)
{
return PartialView("_AddProduct", model);
}
//do some stuff
return PartialView("_AddProduct");
}
因此,当视图打开时(作为jQuery对话框),我有所有设置的表单。如果我选择一个orgName,它会从数据库中提取accountName(级联)。现在因为我正在使用模型验证,当我没有填写所有必填字段,然后按提交时,它会显示验证消息。它还向我显示了在提交之前我已经输入的字段的预填充值。删除的是级联下拉值。因此它继续显示所选的orgName,但是accountName下拉丢失了数据库中先前填充的值。
如何在点击提交之前维护已经拉出的SelectItems
答案 0 :(得分:0)
将javascript部分中的代码更改为:
$("#@orgFieldId").change(function () {
var idProd = $(this).val();
$.getJSON("/JsonService/GetAccounts", { orgId: idProd },
function (myData) {
var select = $("#@fieldId");
select.empty();
$.each(myData, function (index, itemData) {
select.append($('<option/>', {
value: itemData.Value,
text: itemData.Text
}));
});
});
});
$(document).ready(function () {
$("#@orgFieldId").change();
});