1

描述我的场景将是描述我想要实现的目标的最佳方式。我正在寻找一个更清洁的解决方案,如果它存在的话。

我们有想要锁定的内容。我抽象了解锁模型,因为我们可以有不同的类型。它可能是重定向或渲染的局部视图或将来可能出现的其他东西,所以我决定尝试返回一个 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 ?

4

0 回答 0