我已经读过MVC' JavaScriptResult
是一种反模式。
基本的解释是Controller必须知道View,这就是它反模式的原因。
我希望有人可以更详细地描述正在发生的事情以及它为何不好。
很多人都引用了this blog,但我得到了503 ......
示例:
[HttpPost]
public ActionResult SomeMethod()
{
return JavaScript("window.location = '/url';");
}
答案 0 :(得分:1)
感谢@GrawCube link。
完整文章如下。
谨防ASP.NET MVC JavaScriptResult
ASP.NET MVC优于经典ASP.NET的一个巨大优势是表示和控制器逻辑之间的关注点的清晰分离。不幸的是,虽然MVC RC已经带来了许多改进,但它也采取了一步措施,通过引入JavaScriptResult ActionResult来打破关注点的清晰分离。根据发行说明,“JavaScriptResult类用于执行在服务器上创建并发送到客户端的JavaScript代码。”发行说明甚至包括以下代码示例:
public ActionResult DoSomething() { script s = "$('#some-div').html('Updated!');"; return JavaScript(s); }
虽然我可以推测,包含JavaScriptResult的方法不止一个,但上面的例子应该被视为其使用的反模式。这个例子在视图本身的控制器中引入了一个非常脆弱的依赖。在经典ASP.NET中,代码隐藏页面能够对视图中的元素进行强类型访问。在上面的场景中,类似的依赖关系被引入控制器,但现在它甚至都没有强类型。
与扩展方法和lambda表达式一样,JavaScriptResult为开发人员提供了更多的权力,但如果使用不当,也有助于自己在脚下射击。因此,与任何强大的.NET工具一样,有充分的理由使用它,密切关注正确的关注点分离,并始终在设计中强烈保持可测试性和可维护性。
Billy McCafferty