我有一个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。
我很好奇是否有更多的方法可以实现这一点,我还没有遇到过。
答案 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,并且您可能可能会为您的收件箱/发件箱操作重复使用相当数量的代码,可能包括部分视图本身