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
這只是一個抽象的例子,可能在我需要的發送者 - 接收者解決方案中的服務器上承擔更多的責任(例如從服務器加載更多數據)。 我也更喜歡服務器版本,因爲它是單元可測試的。 –