【发布时间】:2013-04-12 13:15:44
【问题描述】:
前提:我是MVC的新手,我的英文不是很完美,希望你能理解我的帖子,否则我是来解释的。
我正在处理由 ASP.Net MVC 中的另一个开发人员创建的项目,我遇到了这个问题:
在一个视图中,我有两个级联的 DropDownList:一个带有 Distributors,另一个带有在第一个 DropDownList 中选择的 Distributor 的 Vendors。
这是代码:
在体内:
<tr>
<td>
<span>Distributor</span>
</td>
<td>
@Html.DropDownList("DistributorID")
@Html.ValidationMessageFor(model => model.DistributorID)
</td>
</tr>
<tr>
<td>
<span>Vendor</span>
</td>
<td class="tdAlignLeft">
@Html.DropDownList("VendorCode")
@Html.ValidationMessageFor(model => model.ClientHeaderInformation.VendorCode)
</td>
</tr>
在脚本中:
$("#DistributorID").change(function (e) {
var SelectGroupId =$(this).val();
$.getJSON('@Url.Action("VendorByDistributor", "ClientInfo")', { VendorGroup: DistributorID }, function (param) {
var vendorCodes = $('#VendorCode');
vendorCodes.empty();
$.each(param, function (index, param) {
vendorCodes.append(
$('<option/>')
.attr('value', param.vendorCode)
.text(param.vendorName)
);
});
});
});
在控制器中:
public ActionResult VendorByDistributor(int _DistributorID)
{
var Vendors = db.View_Vendors.Where(n => n.DistributorID.Equals(_DistributorID)).Select(
x => new
{
vendorCode = x.VendorCode,
vendorName = x.VendorName
});
return Json(Vendors, JsonRequestBehavior.AllowGet);
}
'View_Vendors' 是一个 SQL Server 视图,映射到实体框架,这是 SQL:
SELECT A.DistributorID, A.DistributorName, B.VendorName, B.VendorCode
FROM dbo.Distributors AS A LEFT OUTER JOIN dbo.Vendors AS B ON
A.VendorCode = dbo.Vendor.VendorCode
一切似乎都运行良好,但是当我保存视图时,有时 ClientInfo 类的 VendorCode 属性没有最后选择的值。如果我更改第一个 DropDownList 上的 Distributor,就会发生这种情况,在这种情况下,第二个 DropDownList (Vendors) 会获得正确的值,但是如果我选择一个 Vendor 然后我保存模型,则属性 VendorCode 仍然具有第一个值。
我还尝试创建一个函数来测试 Vendors DropDownList 的事件“更改”...
$ ("# VendorCode.") Change (function (e) {
SelectId var = $ (this). val ();
$. getJSON ('@ Url.Action ("updateVendorCode", "ClientInfo")', {VendorCodePass: SelectId});
});
...事实上,只有当我不更改分销商并且未重新加载供应商项目时,事件才会正确触发,在这种情况下,事件只会在第一次触发。
听起来像是第二个 DropDownList Vendors 的刷新问题,但是我找不到解决办法……
皮莱吉
【问题讨论】:
-
对不起,文字被复制了,现在我把它剪掉了。
标签: asp.net-mvc json mvvm html-select cascadingdropdown