2
我想为每个接收方创建两个部分视图,并通过控制器中的发送方法进行连接。 Ajax Action调用需要div的Id,它必须被重新渲染。但我希望发送者完全脱离接收器。使用Razor MVC3的发送方 - 接收方
我可以在不使用AjaxOptions.UpdateTargetId的情况下重新渲染PartialView(例如在Controller本身中)?
这个想法是允许多个接收者连接到一个发件人(类似于WebParts机制)。
Index视图:
@{
ViewBag.Title = "Test Ground";
var sender = (MVCPortalViewModel.Models.SenderModel)ViewBag.Model.PortletModels["Sender"];
var receiver = (MVCPortalViewModel.Models.ReceiverModel)ViewBag.Model.PortletModels["Receiver"];
}
<p>@Html.Partial("SenderPartView", sender)</p>
<p>@Html.Partial("ReceiverPartView", receiver)</p>
发件人查看:
@model MVCPortalViewModel.Models.SenderModel
@using (Ajax.BeginForm("ApplyColor", "Test", new { Color = @Model.Color }, new AjaxOptions { UpdateTargetId = @ViewBag.SenderDivId, HttpMethod = "Post" }))
{
<div id="senderPartDiv" style="border: 1px solid black;">
<div style="background-color: @Model.Color">
<h2>@Model.Title</h2>
</div>
<p>Hallo @Html.ViewContext.HttpContext.User.Identity.Name</p>
<p>
@Html.Editor("Color")
<input type="submit" value="Apply Color" />
</p>
<p>
@Ajax.ActionLink("Send Color", "SendColor", new { Color = @Model.Color }, new AjaxOptions { UpdateTargetId = @ViewBag.ReceiverDivId, HttpMethod = "Post" })
</p>
</div>
}
接收器查看:
@model MVCPortalViewModel.Models.ReceiverModel
<div id="receiverPartDiv" style="border: 1px solid black;">
<h2 style="background-color: @Model.Color">@Model.Title</h2>
<p>Color: @Model.Color</p>
</div>
控制器:
public class TestController : Controller
{
public ActionResult Index()
{
ViewBag.Model = Model;
ViewBag.ReceiverDivId = "receiverPartDiv";
ViewBag.SenderDivId = "senderPartDiv";
return View();
}
public ActionResult SendColor(string Color)
{
var receiverModel = ((ReceiverModel)Model.PortletModels["Receiver"]);
receiverModel.Color = Color;
ViewBag.ReceiverDivId = "receiverPartDiv";
ViewBag.SenderDivId = "senderPartDiv";
return PartialView("ReceiverPartView", receiverModel);
}
}
我越思考这个问题,我越有感觉,你应该实现一个JavaScript解决方案。除非您在服务器上承担其他责任,否则返回服务器仅用于更新本地视图是没有意义的。 – slfan
这只是一个抽象的例子,可能在我需要的发送者 - 接收者解决方案中的服务器上承担更多的责任(例如从服务器加载更多数据)。 我也更喜欢服务器版本,因为它是单元可测试的。 –