我想显示一个编辑对话框。对于对话框,我使用_EditModal.cshtml接受Model.WallResponses
作为模型。那么当用户点击message-edit
按钮时,如何传递@resp对象?
Bellow是我的listbox.cshtml文件。而且我不想在这里使用@ Html.ActionLink / @ Html.Action,因为它会再次击中控制器,这需要时间。
@model PageableWallResponse
@{
Layout = null;
}
@foreach (var resp in Model.WallResponses)
{
<div class="list-group-item" data-thread-id="@resp.ThreadId" data-message-id="@resp.Id" data-item-id="@resp">
<span class="recipients">@resp.RecipientInfo</span>
<abbr class="timeago badge" title="@resp.Timestamp.ToString("u")">@resp.Timestamp.ToLocalTime()</abbr>
<div class="message">
<span class="@(resp.Highlight ? "" : "highlight")">
<i class="fa fa-@resp.Icon"></i> @resp.ShortDescription
</span>
</div>
<div class="message-footer">
<ul class="message-actions pull-right">
<li>
<a role="button" class="message-notify" href="#" title="Remind recipient by sending a Push Notification">
<i class="fa fa-bell"></i><span>Remind</span>
</a>
</li>
<li>
<a role="button" class="message-edit" href="#" title="Edit this message">
<b><i class="fa fa-edit"></i></b><span>Edit</span>
</a>
</li>
</ul>
</div>
</div>
}
任何帮助将不胜感激......
答案 0 :(得分:0)
在保留索引的链接上设置数据属性,然后使用jQuery对话框创建具有局部视图的对话框:
@model PageableWallResponse
@{
Layout = null;
var counter = 0;
}
@foreach (var resp in Model.WallResponses)
{
counter++;
<div class="list-group-item" data-thread-id="@resp.ThreadId" data-message-id="@resp.Id" data-item-id="@resp">
<span class="recipients">@resp.RecipientInfo</span>
<abbr class="timeago badge" title="@resp.Timestamp.ToString("u")">@resp.Timestamp.ToLocalTime()</abbr>
<div class="message">
<span class="@(resp.Highlight ? "" : "highlight")">
<i class="fa fa-@resp.Icon"></i> @resp.ShortDescription
</span>
</div>
<div class="message-footer">
<ul class="message-actions pull-right">
<li>
<a role="button" class="message-notify" href="#" title="Remind recipient by sending a Push Notification">
<i class="fa fa-bell"></i><span>Remind</span>
</a>
</li>
<li>
<a role="button" class="message-edit" data-index="@counter" href="#" title="Edit this message">
<b><i class="fa fa-edit"></i></b><span>Edit</span>
</a>
</li>
</ul>
</div>
</div>
}
@section Scripts{
<script>
$(function(){
$(".message-edit").click(function(){
var index = $(this).data("index");
$("<div>").dialog({
autoOpen: true,
open: function(event, ui){
$(this).load("@Html.RenderPartial("_EditModal", Model.WallResponses[index])");
},
close: function(event, ui){
$(this).remove();
}
});
});
});
</script>
}
答案 1 :(得分:0)
如果你不想使用@ Html.ActionLink,那么你必须只使用javascript并且你不能传递@resp对象(可以在服务器中的asp mvc视图生成中使用)。
您必须编写加载所选项数据的javascript并将该数据传递给对话框。 如果您真的想要遵循这种方式,我会建议使用像KnockoutJS这样的框架。
但我会建议你使用Asp.net MVC部分视图来获得你想要的东西。当然,它必须击中控制器才能获得局部视图,但控制器仅响应视图对话框,因此呼叫的持续时间必须最小。
解释部分视图对话框的好回答可能是this。