描述我的场景将是描述我想要实现的目标的最佳方式。我正在寻找一种更清洁的解决方案,如果它存在的话。
我们有想要锁定的内容。我抽象了解锁模型,因为我们可以有不同的类型。它可能是一个重定向或渲染的局部视图或将来可能出现的其他东西,所以我决定尝试返回一个ActionResult。
public abstract class AContentUnlocker
{
public abstract ActionResult GetUnlockActionResult();
}
public class RedirectUnlocker : AContentUnlocker
{
public override ActionResult GetUnlockActionResult()
{
return new RedirectResult("http://www.url1.com?returnUrl=mywebsiteagain");
}
}
public class PartialViewUnlocker: AContentUnlocker
{
public override ActionResult GetUnlockActionResult()
{
PartialViewResult view = new PartialViewResult();
view.ViewName = "_PartialViewToUnlock";
return view;
}
}
我的内容将在具有适当解锁机制的模型中表示
public class MyContent
{
public string Description { get; set; }
public AContentUnlocker ContentUnlocker { get; set; }
}
在我的控制器中,我只需使用正确的解锁机制设置返回我想要的内容。
public ActionResult Index()
{
MyContent myContent = new MyContent() {
Description = "Content 1",
ContentUnlocker = new PartialViewUnlocker()
};
return View(myContent);
}
在我的索引视图中,我会执行ActionResult。
@{
Model.ContentUnlocker.GetUnlockActionResult().ExecuteResult(this.ViewContext);
}
return View(myContent);
重定向ActionResult工作正常。 我的问题是,对于部分视图操作结果,给定MVC的执行周期,部分视图在控制器视图之前呈现。所以我得到了类似的东西:
<!-- html of the partial view rendered -->
<div> blah blah </div>
<!-- html of the parent view -->
<html>
<head></head>
<body> blah .... </body>
</html>
我不确定这是可能的,但有没有办法以与Html.RenderPartial相同的方式执行我的ActionResult?