需要在.net MVC5中显示编辑对话框

时间:2014-07-15 09:21:59

标签: jquery .net asp.net-mvc

我想显示一个编辑对话框。对于对话框,我使用_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>
}

任何帮助将不胜感激......

2 个答案:

答案 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