从视图内部处理ActionResult

时间:2013-03-21 17:07:48

标签: asp.net-mvc

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

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

0 个答案:

没有答案