我读过MVC的JavaScriptResult是反模式。

基本解释是Controller必须具有View知识,这就是为什么它是反模式的原因。

我希望有人可以对正在发生的事情及其坏处给出更详细的描述。

很多人都引用了this blog,但是我得到了503的信息...

例:

[HttpPost]
public ActionResult SomeMethod()
{
    return JavaScript("window.location = '/url';");
}

最佳答案

感谢@GrawCube提供的link

全文如下。


  当心ASP.NET MVC JavaScriptResult
  
  与传统的ASP.NET相比,ASP.NET MVC的巨大优势之一是将表示和控制器逻辑之间的关注点清晰地分离了。不幸的是,尽管MVC RC带来了许多改进,但它也迈出了一步,通过引入JavaScriptResult ActionResult打破了关注点的清晰分离。根据发行说明,“ JavaScriptResult类用于执行在服务器上创建并发送给客户端的JavaScript代码。”发行说明甚至还包含以下代码示例:

public ActionResult DoSomething()
{
    script s = "$('#some-div').html('Updated!');";
    return JavaScript(s);
}

  
  尽管我可以推测有很多有用的方案可以包含JavaScriptResult,但是上面的示例应被视为其使用的反模式。此示例将非常脆弱的依赖项引入到视图本身的控制器中。在经典的ASP.NET中,代码隐藏页面能够对视图中的元素进行强类型访问。在上述情况下,控制器中引入了类似的依赖关系,但是现在甚至没有强类型化。
  
  像扩展方法和lambda表达式一样,JavaScriptResult可将更多功能交付给开发人员,但如果使用不当,也可以帮助您自行射击。因此,像任何功能强大的.NET工具一样,有充分的理由使用它,密切关注各个问题,并在设计中始终保持可测试性和可维护性。
  
  比利·麦卡菲蒂

10-02 18:45