【问题标题】:How to pass Json values from controller to view?如何将 Json 值从控制器传递到视图?
【发布时间】:2015-07-04 11:25:21
【问题描述】:

我有一个下拉列表,它的 ID 为 stakeHolderName01。我想在单击按钮时获取下拉列表中的值。为此,我正在编写如下代码。由于我是一名学习者,因此我从某个站点获得了此代码。我在控制器中获取值我不知道如何将值从控制器传递到视图。谁能帮我 ?我对 MVC 很陌生

这是我从控制器获取值的 Javascript 代码

function DropDownLoad() {
        {
            alert("");
            $.ajax({
                url: '@Url.Action("Dropdown", "JointCompany")',
                type: "GET",
                success: function (jpoc) {
                    $("stakeHolderName01").append(jpoc.Values);
                }
            });
        }
    }

这是我的控制器和我的类名jointcompanyviewmodel,对象是jpoc

 public JsonResult Dropdown(JointCompanyViewModel jpoc)
    {
        jpoc.DropDownValues();
        return Json(jpoc, JsonRequestBehavior.AllowGet);
    }

这是我的模型 Jointcompanymodel,在这个模型中,我从 WCF 服务对象名称获取数据是 Proxy。这里一切正常。

 public List<JointCompanyViewModel> DynamicDropDown()
    {
        var result = Proxy.GetJOCStakeHolder();
        List<JointCompanyViewModel> obj = new JavaScriptSerializer().Deserialize<List<JointCompanyViewModel>>(result);
        return obj;
    }

    public List<SelectListItem> Values { get; set; }

    public List<SelectListItem> DropDownValues()
    {
        var obj = DynamicDropDown();
        List<SelectListItem> lst = new List<SelectListItem>();
        foreach (var items in obj)
        {
            lst.Add(new SelectListItem { Text = items.Name, Value = items.ID });
        }
        Values = lst;
        return Values;
    }

【问题讨论】:

  • 你的选择器能找到元素吗? $("stakeHolderName01")... 也许 $("#stakeHolderName01")

标签: jquery asp.net json asp.net-mvc asp.net-mvc-4


【解决方案1】:

我想这就是你想要的:

在您的控制器操作中,您希望将方法调用 jpoc.DropDownValues() 的结果存储到一个变量中并从控制器操作返回该变量:

public JsonResult Dropdown(JointCompanyViewModel jpoc)
    {
        var result = jpoc.DropDownValues();
        return Json(result, JsonRequestBehavior.AllowGet);
    }

然后在客户端,您的 ajax 调用将收到您的控制器操作的结果,即对象列表:

function DropDownLoad() {
        {
            alert("");
            $.ajax({
                url: '@Url.Action("Dropdown", "JointCompany")',
                type: "GET",
                success: function (jpoc) {
                    $("#stakeHolderName01").append(jpoc);
                }
            });
        }
    }

请记住,您需要调用 javascript 函数 DropDownLoad() 来调用您的 ajax 调用并让它检索您的控制器操作的结果。

此外,您的 ajax 调用成功回调中的当前逻辑还不足以更新您的下拉列表。然后您需要考虑如何执行此操作,这实际上取决于您使用的下拉列表类型。如果它类似于&lt;id="stakeHolderName01" select&gt;&lt;/select&gt;,那么你可以这样做:

var jpoc = [{
  Text: "option 1",
  Value: 1
}, {
  Text: "option 2",
  Value: 2
}]

// put this inside your success callback
for (var i in jpoc) {
  var x = jpoc[i];
  $('#stakeHolderName01').append('<option value="' + x.Value + '">' + x.Text + '</option>');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="stakeHolderName01"></select>

【讨论】:

  • 如果jpocJsonResult,你认为.append(jpoc) 会做什么?
  • 如果结果是 json 字符串,则追加字符串。尽管它很可能什么都不做,因为 jQuery 将 json 字符串解析为不会附加到 dom 的 javascript 对象。但作为第一步,OP 将按照要求成功地将 json 数据从他的控制器传递到他的视图。
  • 哦,我明白你的意思了。他试图从他的 razor 视图中访问控制器操作的 JsonResult,而不是通过 ajax 调用来获取它。
猜你喜欢
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多