我有一个包含索引,编辑,创建和详细信息视图的案例模型。我有一个案例控制器。当用户处于案例的编辑视图中时,我希望他们能够单击一个按钮,打开带有局部视图的jQuery对话框,以便将案例中的投诉代码添加到案例中。这是局部视图:
@model IEnumerable<cummins_db.Models.ComplaintCode>
@{
ViewBag.Title = "Case Complaint Codes";
}
<h2>Select a complaint code</h2>
<table>
<tr>
<th></th>
<th>
Complaint Code Name
</th>
<th>
Complaint Type
</th>
</tr>
@try
{
foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})
</td>
<td>
@Html.DisplayFor(modelItem => item.ComplaintCodeName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ComplaintType)
</td>
</tr>
}
}
catch
{
}
</table>
用户可以选择部分视图列表中显示的数据,并将其添加为已打开的编辑记录的多对多关系。 我在局部视图中使用此控制器方法来添加MTM记录。
public void SelectForCase(int id)
{
int cid;
cid = casesid;
if (ModelState.IsValid)
{
CaseComplaint c = new CaseComplaint
{
CasesID = cid,
ComplaintCodeID = id
};
db.CaseComplaints.Add(c);
db.SaveChanges();
}
}
问题是在此操作触发后,jQuery模式对话框和编辑视图关闭。 我只想关闭jQuery对话框并允许用户继续编辑案例记录。
部分视图正在执行它需要做的事情,但我需要保持编辑视图打开。
这是从编辑视图actionlink调用的jQuery,并在对话框中打开局部视图:
$(document).ready(function () {
$('.addComplaintLink').button();
$('#AddComplaintDialog').dialog(
{
autoOpen: false,
width: 400,
resizable: false,
modal: true,
buttons:
{
"Cancel": function () {
$(this).dialog('close');
}
}
});
$('.addComplaintLink').click(function () {
linkObj = $(this);
var dialogDiv = $('#AddComplaintDialog');
var viewUrl = linkObj.attr('href');
$.get(viewUrl, function(data) {
dialogDiv.html(data);
//open dialog
dialogDiv.dialog('open');
});
return false;
});
});
答案 0 :(得分:1)
如果我理解正确,您需要在部分中使用AJAX
。
所以不要使用:
@Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})
尝试:
@Ajax.ActionLink("linkText", "SelectForCase", new { id = item.ComplaintCodeID},
new AjaxOptions() {...})
[阅读更多:http://msdn.microsoft.com/en-us/library/dd493139]
或尝试使用jQuery.Ajax更新模型,而不是通过回发整个视图。