这是我第一次使用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>
}
答案 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);
}
});