我正在使用一些传统的Asp.Net MVC项目,在一些控制器中查找返回javascript调用的操作非常常见。例如:
[HttpPost]
public async Task<ActionResult> Create(string code)
{
var result = await _repository.CreateFromCode(code);
if(result > 0)
return JavaScript("DoSuccessLogic(" + result + ");");
else
{
ModelState.AddModelError("Code", "Wrong code specified. Please enter a valid code");
return PartialView(code);
}
}
这种从服务器调用客户端代码的想法对我来说看起来很尴尬,实际上它闻起来像一个反模式。我假设System.Web.Mvc.JavaScript方法已被添加到MVC框架中以处理非常具体的情况,但它的用法可能不太鼓励;特别是在像这样的情况下,可以使用Json方法代替并在客户端完全从onSuccess处理程序或类似的东西处理动作的后果。
但是我不确定并且没有说服其他人改变它的论据。
所以问题是:
答案 0 :(得分:2)
1)是的,我认为它可以被称为反模式
2)一般来说,广泛使用不是很好的做法。
JavaScript(...)方法返回 JavaScriptResult 。确实 JavaScriptResult 与 ContentResult 相同,但 JavaScriptResult 被硬编码以返回内容类型标题 application / 响应中的x-javascript 。
您应该考虑使用 JavaScript(...),就像将SQL命令注入C#代码一样,这是一种令人不安的技术冲突。我将尝试描述这种方法的利弊。
<强>优点强>
<强>缺点强>
答案 1 :(得分:0)
我不知道我会把它称为反模式。看起来这个功能可能会向客户推送一些东西,但很难从提供的代码片段中分辨出来。在某些情况下,数据会被推送到客户端,但我认为通常不会这样做。
有些问题可以帮助您确定代码的可持续性/可维护性:
DoSuccessLogic(...)
? DoSuccessLogic(...)
做什么不能在C#中完成?DoSuccessLogic(...)
是否向客户推送了一些东西?