MVC3部分视图:无法在使用Json对象的部分视图渲染的视图源中看到html

时间:2013-07-18 13:31:33

标签: json asp.net-mvc-3

这是我第一次使用ASP.NET MVC而且卡住了。

在我的代码中,我使用JQuery / json进行Ajax调用,在按钮点击时将一组选定的选项传递给控制器​​端并在那里执行一些操作。

然后我返回一个包含表格的Partial View,以便我可以在页面上看到部分视图(即网格)的内容。

现在我想通过网格,但是当我尝试检查它时,我意识到浏览器的View Source中没有创建HTML代码。

我在这里错过任何基本的东西吗?任何人都可以帮忙吗?

控制器 - 视图的主要操作方法:

public ActionResult AssignCalculationToSC()
{
   //Some Oprations performed
   return View();  
}

从Ajax调用的Action方法返回Partial View:

public ActionResult AddSelectedList(string selectedList, string calculationPurpose)
{  
    List<AssignCalculationsSourceDataModel> lstAssignCalculationsSourceDataModel = new List<AssignCalculationsSourceDataModel>();
    AssignCalculationsSourceDataModel assignCalculationsSourceDataModel = new AssignCalculationsSourceDataModel();
    return PartialView("AssignCalculationToSC", lstAssignCalculationsSourceDataModel);
}

Ajax调用的JQuery代码:

$(function () {

    $('#btnAdd').click(function () {
        var selectedList = [];
        $("#ddlSupplementalCalculationList option:selected").each(function (i, selected) {
            var $this = $(this);
            selectedList.push({ Id: $this.val(), Value: $this.text() });
           });

        getCalculationListGrid(selectedList, calculationPurpose);
    });

    function getCalculationListGrid(selectedList, calculationPurpose) {
        $.ajax(
        {
            url: "AddSelectedList/SupplementalPricing",
            type: "POST",
            dataType: "html",
            traditional: true,
            data: { selectedList: JSON.stringify(selectedList), calculationPurpose:  calculationPurpose },
            success: function (response) 
            {
                $("#dvGrid").html(response);
            }
        });
    }
});

主要观点:

@{
    ViewBag.Title = "Assign Price Values";
}

@model  IList<Bnym.Equinox.Accounting.Web.Portal.Models.Pricing.AssignCalculationsSourceDataModel> 

@{Html.RenderPartial("PartialAssignCalculationGrid", Model);}

部分视图:

@model IList<Bnym.Equinox.Accounting.Web.Portal.Models.Pricing.AssignCalculationsSourceDataModel> 

@if (Model != null)
{
    <div id="dvGrid">
    <table id="grid" style="table-layout: fixed;">
    </table>
    </div>
}

1 个答案:

答案 0 :(得分:1)

Q1)现在我想通过网格但是当我尝试检查它时,我意识到浏览器的View Source中没有创建HTML代码。

部分视图中的HTML永远不会出现在页面的源代码中,因为它在初始HTTP GET中不存在。浏览器中的View Source命令显示在执行任何javascript之前收到的HTML。

Download and install fiddler并检查Ajax调用,以查看从控制器返回的HTML。

Q2(隐式)为什么部分视图永远不会在屏幕上显示?

您的主视图需要div#dvgrid,您的局部视图需要托管网格的内容,如下所示:

主要观点:

@{
    ViewBag.Title = "Assign Price Values";
}

@model  IList<Bnym.Equinox.Accounting.Web.Portal.Models.Pricing.AssignCalculationsSourceDataModel> 

<div id="dvGrid">
</div>

部分视图:

@model IList<Bnym.Equinox.Accounting.Web.Portal.Models.Pricing.AssignCalculationsSourceDataModel> 

@if (Model != null)
{
    <table id="grid" style="table-layout: fixed;">
        @foreach(var item in Model){
            <tr>
                <td>
                    DATA <!-- render data here -->
                </td>
                <!-- ... -->
            </tr>
        }
    </table>
}

修改

您需要在控制器中使用AddSelectedList属性修饰[HttpPost]操作:

[HttpPost]
public ActionResult AddSelectedList(string selectedList, string calculationPurpose)
{  
    List<AssignCalculationsSourceDataModel> lstAssignCalculationsSourceDataModel = new List<AssignCalculationsSourceDataModel>();
    AssignCalculationsSourceDataModel assignCalculationsSourceDataModel = new AssignCalculationsSourceDataModel();
    return PartialView("AssignCalculationToSC", lstAssignCalculationsSourceDataModel);
}

你需要修复你的ajax调用。 请注意,JSON.stringify()方法必须包装整个javascript对象。

$.ajax(
        {
            url: "@Url.Action("GetData")",
            type: "POST",
            dataType: "json",
            traditional: true,
            data: JSON.stringify({ selectedList: selectedList, calculationPurpose:  calculationPurpose }),
            success: function (response) 
            {
                $("#dvGrid").html(response);
            }
        });