Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc JSON函数-级联DropDownList-更新模型_Asp.net Mvc_Json_Mvvm_Html Select_Cascadingdropdown - Fatal编程技术网

Asp.net mvc JSON函数-级联DropDownList-更新模型

Asp.net mvc JSON函数-级联DropDownList-更新模型,asp.net-mvc,json,mvvm,html-select,cascadingdropdown,Asp.net Mvc,Json,Mvvm,Html Select,Cascadingdropdown,前提:我是MVC新手,我的英语不是很好,我希望你能理解我的帖子,否则我会在这里解释 我正在从事ASP.Net MVC中另一名开发人员创建的项目,我遇到了以下问题: 在视图中,我有两个级联的DropDownList:一个是分销商,另一个是在第一个DropDownList中选择的分销商的供应商 代码如下: 在正文中: <tr> <td> <span>Distributor</span> </td> &

前提:我是MVC新手,我的英语不是很好,我希望你能理解我的帖子,否则我会在这里解释

我正在从事ASP.Net MVC中另一名开发人员创建的项目,我遇到了以下问题:

在视图中,我有两个级联的DropDownList:一个是分销商,另一个是在第一个DropDownList中选择的分销商的供应商

代码如下:


在正文中:

<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>

“视图\u供应商”是一个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上更改分发服务器,则会发生这种情况,在这种情况下,第二个DropDownList(供应商)会获得正确的值,但是如果我选择一个供应商,然后保存模型,则属性VendorCode仍然具有第一个值

我还尝试创建一个函数来测试供应商DropDownList的事件“change”

$ ("# VendorCode.") Change (function (e) {
     SelectId var = $ (this). val ();
     $. getJSON ('@ Url.Action ("updateVendorCode", "ClientInfo")', {VendorCodePass: SelectId});
  });
。。。事实上,只有在我没有更改分发服务器并且没有重新加载供应商项目的情况下,事件才会正确触发,在这种情况下,事件只在第一次触发

听起来像是第二个DropDownList供应商的刷新问题,但我找不到解决方案


皮莱吉

我写了一篇关于这个的博客文章。以下是与您的案例类似的相关代码

$("#ClientId").change(function () {
    var clientId = "";
    $("#ClientId option:selected").each(function () {
        clientId += $(this)[0].value;
    });
    var url = '<%:Url.Action("ProjectList", "Client") %>' + "/" + clientId;
    $.getJSON(url, null, function (data) {
        var selectedValue = '<%:Model.ProjectId %>';
        $("#ProjectId").empty();
        $.each(data, function (index, optionData) {
            if (optionData.OBJID == parseInt(selectedValue))
                $("#ProjectId").append("<option value='" + optionData.ObjId+ "' selected='true'>" + optionData.Name + "</option>");
            else 
                $("#ProjectId").append("<option value='" + optionData.ObjId + "'>" + optionData.Name + "</option>");
        });
    });
}).change();
$(“#ClientId”).change(函数(){
var clientId=“”;
$(“#客户端ID选项:选中”)。每个(函数(){
clientId+=$(此)[0]。值;
});
var url=''+“/”+clientId;
$.getJSON(url,null,函数(数据){
var selectedValue='';
$(“#ProjectId”).empty();
$.each(数据、函数(索引、选项数据){
if(optionData.OBJID==parseInt(selectedValue))
$(“#ProjectId”).append(“+optionData.Name+”);
其他的
$(“#ProjectId”).append(“+optionData.Name+”);
});
});
}).change();

好的,对不起,这是一个很小的问题。代码是正确的,只是一个字段出错: VendorCode代替VendorNumber…:-)

有时你看不到最简单的解决方案

我不会删除这篇文章,因为代码是正确的,它可能对其他人有用

问候


皮莱吉

对不起,这篇文章是重复的,现在我把它剪掉了。
$ ("# VendorCode.") Change (function (e) {
     SelectId var = $ (this). val ();
     $. getJSON ('@ Url.Action ("updateVendorCode", "ClientInfo")', {VendorCodePass: SelectId});
  });
$("#ClientId").change(function () {
    var clientId = "";
    $("#ClientId option:selected").each(function () {
        clientId += $(this)[0].value;
    });
    var url = '<%:Url.Action("ProjectList", "Client") %>' + "/" + clientId;
    $.getJSON(url, null, function (data) {
        var selectedValue = '<%:Model.ProjectId %>';
        $("#ProjectId").empty();
        $.each(data, function (index, optionData) {
            if (optionData.OBJID == parseInt(selectedValue))
                $("#ProjectId").append("<option value='" + optionData.ObjId+ "' selected='true'>" + optionData.Name + "</option>");
            else 
                $("#ProjectId").append("<option value='" + optionData.ObjId + "'>" + optionData.Name + "</option>");
        });
    });
}).change();