无法将MVC(Razor)视图中的值传递给Controller中的JsonResult方法

时间:2014-03-06 17:42:15

标签: javascript jquery asp.net-mvc json razor

我的MVC(Razor)视图中有两个下拉列表:Country和State。 我可以填写下拉列表的相互独立。现在我想根据国家/地区下拉列表的更改事件填写第二个下拉列表(状态)。

为此,我在Controller中使用了JsonResult方法,对于这个方法,我从我的视图中传递Country的Change事件,以便填充我的第二个下拉状态。

问题陈述: JsonResult方法是从我的视图中触发的,但是CountryId值没有从视图传递到控制器以便填充状态。

我在这里做错了什么?

查看:

使用Javascript:

<script type="text/JavaScript">
    function CountryChange() {

        var url = '@Url.Content("~/MasterConfigGeneral/GetState")';
        var ddlsource = "#CountryID";
        var ddltarget = "#StateID";
        if ($(ddlsource).val() != "") {
            $.ajaxSetup({ cache: false });
            $.getJSON(url, { countryID: $(ddlsource).val() }, function (data) {
                $(ddltarget).empty();

                $("#StateID").append("<option  value=''>Select State</option>");

                $.each(data, function (index, optionData) {
                    $("#StateID").append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>");
                });
            });
        }
        else {
            $("#StateID").empty();
            $("#StateID").append("<option value=''>Select State</option>");
        }
    }
</script>

我的视图中的下拉列表:

 <div class="cssclass">
        @Html.DropDownListFor(model => model.companyModel.CountryID, new SelectList(Model.ddlCountryStateCity.ddlCountry, "Value", "Text"), "Select Country", new { onchange="CountryChange()" })
        @Html.ValidationMessageFor(model => model.companyModel.CountryID)
    </div>

    <div class="cssclass">
        @Html.LabelFor(model => model.companyModel.StateID)
    </div>
    <div class="editor-field">
        @Html.DropDownList("stateid",Model.ddlCountryStateCity.ddlState,"Select State")
        @Html.ValidationMessageFor(model => model.companyModel.StateID)
    </div>

控制器:

国家/地区下拉列表

#region Country
    public DropdownListCountryStateCity FillDropDownListCountry()
    {
        objDropDownCountryStateCity.ddlCountry = (from s in dbEntity.Countries
                                                  select new SelectListItem()
                                                  {
                                                      Text = s.Name,
                                                      Value = s.CountryID

                                                  }).ToList<SelectListItem>();
        return objDropDownCountryStateCity;
    }
    #endregion

州下拉列表:

#region State

    public JsonResult GetState(string countryID)
    {
        JsonResult jsResult = new JsonResult();
        objDropDownCountryStateCity.ddlState = (from csc in dbEntity.CountryStateCities
                                                join c in dbEntity.Countries on csc.CountryID equals c.CountryID
                                                join s in dbEntity.States on csc.StateID equals s.StateID
                                                where csc.CountryID == countryID
                                                select new SelectListItem()
                                                {
                                                    Text = s.Name,
                                                    Value = s.StateID

                                                }).ToList<SelectListItem>();

        jsResult.Data = objDropDownCountryStateCity.ddlState;
        jsResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        return jsResult;
    }
    #endregion

1 个答案:

答案 0 :(得分:0)

你的问题在于DropDownListFor助手如何生成元素。

在你的代码中,它会产生这样的名称和ID:

<select id="companyModel_CountryID" name="companyModel.CountryID">
    ...
</select>

在你的javascript中,ddlSouce是“#CountryID”。由于没有带有该id的元素,jQuery将null作为数据传递给$ .getJSON。这就是控制器方法什么也得不到的原因。

您有两种选择:

  • 将ddlSource javascript更改为正确的ID(您必须在源代码中查看)或
  • 更改最后一个DropDownListFor帮助程序

new { onchange="CountryChange()" }

new { id = "CountryID", onchange="CountryChange()" }

恕我直言,最后一个选择是最好的选择。