Jquery 带有部分视图的引导模式弹出窗口适用于一个对象,但由于ajax GET请求,另一个对象会收到块
我有两个链接“详细信息”和“历史”,每个链接打开一个模式弹出窗口,从服务器获取html(部分视图),并显示为模式弹出窗口的内容。这适用于细节,但不适用于历史。他们都有相同的逻辑 这是详细信息链接Jquery 带有部分视图的引导模式弹出窗口适用于一个对象,但由于ajax GET请求,另一个对象会收到块,jquery,asp.net-mvc,twitter-bootstrap,razor,bootstrap-modal,Jquery,Asp.net Mvc,Twitter Bootstrap,Razor,Bootstrap Modal,我有两个链接“详细信息”和“历史”,每个链接打开一个模式弹出窗口,从服务器获取html(部分视图),并显示为模式弹出窗口的内容。这适用于细节,但不适用于历史。他们都有相同的逻辑 这是详细信息链接 <a class="modal-pop-up-action-link" title="Details" href="/MyController/Detail/10004" data-modal-url="/MyController/Detail/10004?partial=True" data-m
<a class="modal-pop-up-action-link" title="Details" href="/MyController/Detail/10004" data-modal-url="/MyController/Detail/10004?partial=True" data-modal-title="Details">
<i class="fa fa-file-text-o"></i>
</a>
这是历史链接
<a class="modal-pop-up-action-link" title="History" href="/MyController/History/10004" data-modal-url="/MyController/History/10004?partial=True" data-modal-title="Audit Histories">
<i class="fa fa-list-ol"></i>
</a>
MyController操作的一部分
public async Task<ActionResult> History(int id, bool partial = false)
{
// Logic to get the model
if (partial)
return PartialView("_HistoryGridPartial", model);
else
return View(model);
}
public async Task<ActionResult> Detail(int id, bool partial = false)
{
// Logic to get the model
if (partial)
return PartialView("_DetailGridPartial", model);
else
return View(model);
}
公共异步任务历史记录(int-id,bool-partial=false)
{
//获取模型的逻辑
如果(部分)
返回PartialView(“历史网格部分”,模型);
其他的
返回视图(模型);
}
公共异步任务详细信息(int-id,bool-partial=false)
{
//获取模型的逻辑
如果(部分)
返回PartialView(“\u DetailGridPartial”,model);
其他的
返回视图(模型);
}
这是历史的局部观点
@model IEnumerable<MyModel>
@{
ViewBag.Title = "Histories";
}
<table class="table datatable table-hover table-striped">
<thead>
<tr>
<th>Field 1 Title</th>
<th>Field 2 Title</th>
</tr>
</thead>
<tbody>
@foreach (MyModel rd in Model)
{
<tr>
<td>@rd.Field1</td>
<td>@rd.Field2</td>
</tr>
}
</tbody>
</table>
@model MyDetail
@{
ViewBag.Title = "Details";
}
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-list-alt"> </span>
<label>Details</label>
</div>
<div class="panel-body">
@Html.LabelFor(a => a.Field1): @Model.Field1
...
</div>
</div>
@model IEnumerable
@{
ViewBag.Title=“历史”;
}
字段1标题
字段2标题
@foreach(模型中的MyModel rd)
{
@第1区
@第二区
}
细节部分视图
@model IEnumerable<MyModel>
@{
ViewBag.Title = "Histories";
}
<table class="table datatable table-hover table-striped">
<thead>
<tr>
<th>Field 1 Title</th>
<th>Field 2 Title</th>
</tr>
</thead>
<tbody>
@foreach (MyModel rd in Model)
{
<tr>
<td>@rd.Field1</td>
<td>@rd.Field2</td>
</tr>
}
</tbody>
</table>
@model MyDetail
@{
ViewBag.Title = "Details";
}
<div class="panel panel-default">
<div class="panel-heading">
<span class="glyphicon glyphicon-list-alt"> </span>
<label>Details</label>
</div>
<div class="panel-body">
@Html.LabelFor(a => a.Field1): @Model.Field1
...
</div>
</div>
@model MyDetail
@{
ViewBag.Title=“详细信息”;
}
细节
@LabelFor(a=>a.Field1):@Model.Field1
...
最后是javascript调用
$('.modal-pop-up-action-link').click(function (e) {
e.preventDefault();
BootstrapDialog.show({
size: BootstrapDialog.SIZE_WIDE,
cssClass: 'bootstrap-dialog-model-pop-up',
title: '<h4>' + $(this).data("modal-title") + '</h4>',
message: $('<div></div>').load($(this).data("modal-url")),
buttons: [
{
label: 'Close',
action: function(dialogItself) {
dialogItself.close();
}
}
]
});
});
$('.modal弹出操作链接')。单击(函数(e){
e、 预防默认值();
BootstrapDialog.show({
大小:BootstrapDialog.size\u宽,
cssClass:“引导对话框模型弹出窗口”,
标题:'+$(此).data(“模式标题”)+'',
消息:$('').load($(此).data(“模式url”),
按钮:[
{
标签:“关闭”,
操作:函数(对话框本身){
dialogself.close();
}
}
]
});
});
我理解在Ajax请求中不允许使用GET方法来防止Json劫持。但是,我的问题是,为什么它在一种情况下有效,而在另一种情况下无效,你知道吗
谢谢,我找到了问题
使用Ajax GET请求局部视图是完全有效的。发生的是返回结果有错误,部分视图需要IEnumerable,但我传递了MyViewModel,它包含IEnumerable。现在,将控制器更改为返回IEnumerable而不是MyViewModel成功了
关于GET响应被阻止,因为请求中有一个错误,服务器返回了一个json对象(这是我们设置的一个全局错误处理),它被阻止是因为出于安全目的,我们不允许GET中的json响应
public async Task<ActionResult> History(int id, bool partial = false)
{
// Logic to get the model
if (partial)
return PartialView("_HistoryGridPartial", model.MyEnumerableList);
else
return View(model);
}
公共异步任务历史记录(int-id,bool-partial=false)
{
//获取模型的逻辑
如果(部分)
返回PartialView(“\u HistoryGridPartial”,model.MyEnumerableList);
其他的
返回视图(模型);
}