MVC 3 - 尝试使用ajax在'兄弟'部分之间传递模型

时间:2012-03-19 19:20:09

标签: ajax asp.net-mvc-3

我有一个MessagingContainer,它将显示收件箱和发件箱局部视图。收件箱和发件箱将在点击事件的div内切换。由于收件箱在加载时呈现,因此传递模型很容易。

MessagingContainer -

<div id="messagingContainer">
@{
    Html.RenderPartial(@"~Inbox.cshtml", Model);
}</div>

有一个链接可以到达将触发ajax事件的发件箱。

$('#outBox_@(instanceId)').unbind('click').bind('click', function () {
        $.ajax({
            type: 'POST',
            url: '/Messaging/GetOutbox',
            data: data,
            success: function (result) {
                $('#messagingContainer').html(result);                  
            },
            error: function (req, status, error) {
                alert('Failed Method: MessagingController.GetOutbox');
            }
        });
    });

模型中有多个属性和对象,因此尝试将其重新创建为JSON数组将是漫长而乏味的。我现在唯一的想法是将Model.Id传递给控制器​​,重新获取Model对象,然后将新获取的Model传递给Outbox partial。

我很好奇是否有更多的方法可以实现这一点,我还没有遇到过。

1 个答案:

答案 0 :(得分:0)

我可能会建议您考虑使用相同或不同的视图分别设置收件箱/发件箱操作,然后在您的索引操作中使用Html.Action()呈现收件箱,在切换到发件箱时仅提供部分HTML

控制器

public ActionResult Index()
{
    var pageModel = new PageModel { ... };
    return View(pageModel);
}

public ActionResult GetInbox()
{
    var mailboxModel = new InboxModel { ... };
    return PartialView( "_Mailbox", mailboxModel );
}

public ActionResult GetOutbox()
{
    var mailboxModel = new OutboxModel { ... };
    return PartialView( "_Mailbox", mailboxModel );
}

查看(索引)

 <div id="messagingContainer">
 @{
       Html.RenderAction("getinbox");
 }
 </div>

您的AJAX代码基本上保持不变,但您只是为响应中的发件箱呈现部分HTML,并且您可能可能会为您的收件箱/发件箱操作重复使用相当数量的代码,可能包括部分视图本身