【问题标题】:Asp.net mvc dropdownlist cascading error Cannot set property 'value' of nullAsp.net mvc dropdownlist 级联错误无法设置属性“值”为空
【发布时间】:2018-12-06 09:33:28
【问题描述】:

Hy.
我想制作下拉列表级联。选择下拉列表并发送 editorfor.but
无法设置 null 错误的属性“值”。 我想向编辑器发送一个值以获取下拉列表的值。
你能帮帮我吗?

   public JsonResult GetPrice(string log)
        {
            int id = 1;
            HomeController.sqlconnection con = new HomeController.sqlconnection();
            string FIRMA = "select t.FIRMA,t.donem FROM dbo.TBLFRM as t where t.ID=" + id + "";
            SqlCommand cmd = new SqlCommand(FIRMA, con.connect());
            SqlDataReader rdrr = cmd.ExecuteReader();
            rdrr.Read();
            string firma = rdrr["FIRMA"].ToString();
            string donem = rdrr["DONEM"].ToString();
            ExtreModel item = new ExtreModel();
            item.ItemList = new List<ExtreModel>();
            string urun = "select P.PRICE from DBO.LG_" + firma + "_PRCLIST as p,DBO.LG_" + firma + "_ITEMS as I WHERE P.CARDREF=I.LOGICALREF AND P.CARDREF=" + log + "";

            SqlCommand cmdd = new SqlCommand(urun, con.connect());            
                SqlDataReader rdr = cmdd.ExecuteReader();
            rdr.Read();
                   string PRICE = rdr[0].ToString();
                con.connect().Close();
                return Json(PRICE, JsonRequestBehavior.AllowGet);

        }



 <script>
        $("#LOGI").change(function () {
            var select = $(this);
            var cityname = select.val();
            if (cityname != "") {
                $.ajax({
                    method: "GET",
                    url: '/Mobil/GetPrice' + '?log=' + cityname,
                    beforeSend: function () {

                    }
                }).done(function (result) {
                    document.getElementById("fyt").value = result.PRICE;
                });
            } else {
            }
        });
    </script>

【问题讨论】:

  • 我的 2 美分去了导致问题的这条线:document.getElementById("fyt").value = result.PRICE;。哪个元素有id="fyt",为什么不直接使用$('#fyt').val(result)
  • @Html.EditorFor(model => model.PRICE, new { htmlAttributes = new { id = "price", @class= "form-control" } })
  • 您尝试过什么调试问题?错误发生在浏览器本身还是服务器已经抛出?
  • yes.return [object Object]

标签: javascript jquery asp.net ajax model-view-controller


【解决方案1】:

问题似乎来自这个return 声明:

return Json(PRICE, JsonRequestBehavior.AllowGet);

此语句返回不包含PRICE 属性的纯字符串值,因此result.PRICE 包含空值并导致空属性分配错误消息。如果要返回价格值,只需在done 函数中使用:

document.getElementById("fyt").value = result;

或在 jQuery 版本中:

$('#fyt').val(result);

但如果您仍想返回PRICE 属性,请在 JSON 数据中指定它:

return Json(new { PRICE = PRICE }, JsonRequestBehavior.AllowGet);

AJAX 回调应该是这样的:

$("#LOGI").change(function () {
    var cityname = $(this).val();
    if (cityname != "") {
        $.ajax({
            type: "GET",
            url: '/Mobil/GetPrice',
            data: { log: cityname }
            }).done(function (result) {
                $("#fyt").val(result.PRICE); // now the price property should exist
            });
    } else {
       // do something else
    }
});

【讨论】:

  • Tetsuya Yamamoto,我说了算,但我在下拉列表中选择并在 editorfor 发送 [object Object]
  • 你的意思是result.PRICE返回[object Object]数组吗?听上去好像返回的是 JSON 对象,你可以用console.log(result) 看看返回的是什么类型的对象。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多