获取模型对象作为json响应asp net mvc 4

时间:2014-04-30 11:53:16

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

我想要实现的目标

  • 如果选中了单选按钮,则启动jQuery ajax get请求
  • 使用值
  • 将模型对象检索为json响应
  • 使用该模型对象在剃刀视图上显示数据

我陷入了第三步。如何使用模型对象在剃刀视图上显示数据

P.S。我可以从我的ajax代码

获得“建筑物编号:1”的警报

JS

$('input[name=PerAddress]').on('change', function () {
    if ($('input[name=PerAddress]:checked', '.form-group').val() == 'true') {       
        $.ajax({
            url: "CAD",
            type: 'GET',
            dataType: 'json',
            success: function (data) {
                alert(data.PresentAddress1);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });
    }
});

控制器操作方法:

[HttpGet]
[ActionName("CAD")]
public JsonResult CustomerAddress()
{
    var model = new AccountOpeningComplete
    {
        PresentAddress1 = "Building No : 1", // To be later retrieve from database
        PresentAddress2 = "Mumbai", // To be later retrieve from database
        PresentPostalCode = "497989", // To be later retrieve from database
        CityList = new SelectList(DataAccess.DAL.DropDownValues("City"), "Value", "Text"),
        ProvinceList = new SelectList(DataAccess.DAL.DropDownValues("Province"), "Value", "Text"),
        CountryList = new SelectList(DataAccess.DAL.DropDownValues("Country"), "Value", "Text")
    };
    return Json(model, JsonRequestBehavior.AllowGet);
}

Razor View

@Html.LabelFor(m => m.PresentAddress1, new { @class = "col-xs-6 col-md-3 control-label" })
<div class="col-xs-6 col-md-9">
    @Html.TextBoxFor(m => m.PresentAddress1, new { @class = "form-control" })
</div>

2 个答案:

答案 0 :(得分:1)

根据您的代码,如果您能够正确获得响应,则成功时的数据对象是javascript对象,因为您在ajax调用中将json作为数据类型。

现在,因为你只是从你的asp.net mvc控制器返回json,你需要将这些新的返回值绑定到你的剃刀视图中的控件/元素,即html。

因此。如果是PresentAddress1文本框,则需要在成功块中添加此代码:

success: function (data) {
                $("#PresentAddress1").val(data.PresentAddress1);
            }

您必须从数据javascript对象中获取值并在各自的控件中设置它们。 您的其他选择是:

1)返回带有新数据的局部视图,以便像上面那样单独控制设置值。因此,您需要为html支持设置数据类型,并将视图替换为数据。示例如下:

$.ajax({
    url: "CAD",
    type: 'GET',
    dataType: 'html',
    success: function (data) {
        $('#shell').html(data); //where shell is the id of the container that you want to update with the response from your controller.
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert(errorThrown);
    }
});

2)使用双向数据绑定库,如knockoutjs,您可以在其中请求JSON数据并直接与视图中的控件绑定。 <强>推荐

答案 1 :(得分:0)

您有两种选择:

  1. 在现有视图中使用jQuery将JSON数据加载到预先存在的div中:

    $("#PresentAddress).val(data.PresentAddress1);
    
  2. 你有<div class="col-xs-6 col-md-9" id="PresentAddress"></div>

    1. 从控制器调用部分视图。这将返回一个HTML格式的字符串到您的AJAX调用,然后您可以将其分配给空div。

      $("#AllContent).html(returnedValue);