MVC开发的差异

时间:2015-09-16 22:24:54

标签: asp.net-mvc

这是一个奇怪的问题,但我可以使用一些方向

我一直在研究一个使用MVC的项目,我到处看看的例子,我看到的例子与我实际上没有任何关系。

所有示例都使用Razor语法并使用@model将模型从控制器传递到视图。但我正在做的事与我所看到的不同,我想知道我是否错误地使用了MVC。

我没有使用Razor和@model,而是使用HTML和JQuery以及javascript对象并以这种方式获取返回的数据。

所以我很困惑,我正在做正确的事情"或者我这样做是错误的方式"?

编辑:我如何获取数据

   Select s.*
     From UserSearches us
     join Quotes q 
       on q.UserSearchId = us.Id 
      and q.QuoteNumber is not null 
      and us.SearchDate between @beginDate and @endDate
     join ContainerDetails cd 
       on cd.QuoteId = q.Id
     join Surcharges s on 
       on s.ContainerDetailId = cd.Id

3 个答案:

答案 0 :(得分:1)

JavaScript / JQuery与Razor的目的不同。 Razor在服务器上生成页面,一旦客户端收到它,Razor就完成了。

使用JSON是一个额外的开销,而不是传统的做网站的方式,但在某些情况下可能是最好的。如果您只是一次调用JSON,那么让Razor进行生成可能会更好,并且可以将JavaScript用于需要在客户端进行更改的内容。

您可以使用JSON字符串作为模型,这样您就不必第一次点击服务器了:

@model string
<!-- ... -->
<script>
var model = @Html.Raw(Model); // Raw JSON
</script>

Razor示例

在上面的更改中,您展示了一种JavaScript方法。如果你正在做大量的JavaScript,我可以看到在客户端中完成所有生成的好处(你可能会看到像handlebars这样的东西)。但是,在我看来,剃刀代码更容易阅读。

<form>
  <div>
    @Html.LabelFor(m => m.CompanyName)
    @Html.TextBoxFor(m => m.CompanyName)
  </div>
  <!-- etc -->
</form>

您已经在其他地方的代码中生成了标签和文本框。

它可以在客户端和服务器上处理大多数输入验证(如果JavaScript不起作用),所以你自己创建的代码就少了:

public class MyModel {
  [Required, StringLength(50)]
  public string Title {get;set;}
}

我认为值得花时间学习如何开发多种方式,以便您可以为项目使用最佳解决方案。

答案 1 :(得分:1)

&#34; s&#34;错误的方式&#34;?

.cshtml个文件是&#34; seam&#34;。它们结合了C#和HTML的元素。

@model是一个类似于AngularJS $scope的全局变量。我们的想法是,您将为每个视图使用该模型,然后在客户端操作后验证其内容并执行服务器端操作。

根据应用程序的不同,您可能不希望这样做。使用针对底层ASP.NET API的JavaScript XHR请求来获取返回的数据是完全合理的。我有理由相信,无论如何,ASP.NET MVC正在幕后做什么。看起来你所说的就是你只是手动滚动它。

这是否有效取决于你。痛苦吗?它可以测试吗?你对代码有信心吗?

根据您要执行的操作,可能是时候检查一个客户端JavaScript MVC库(我提到过一个,还有其他库)并且只使用ASP.NET Web API与服务器通信。

希望有所帮助。

答案 2 :(得分:1)

关键区别在于剃刀语法用于在加载时在服务器上生成页面内容(使用Microsoft的MVC框架),而您使用的AJAX模式在页面到达客户端后进行Web服务调用。

在Microsoft生态系统之外,你会看到更多的AJAX。 Web纯粹主义者更倾向于使用AJAX而不是服务器端呈现 - 尤其是在使用AngularJS等客户端框架时。

每种方法都有赞成和反对意见。

使用AJAX的客户端

纯粹主义者坚持使用AJAX调用并动态加载页面的各个部分。使用服务器渲染很昂贵。在服务器上呈现页面时,您会注意到相当大的延迟(有时以秒为单位)。

使用AJAX,页面可以在从服务器加载其他数据时开始在客户端上呈现。它是异步的,可以并行运行。这提供了更好的感知性能。使用服务器呈现时,必须在用户看到任何客户端呈现之前在服务器上完全呈现页面。

服务器渲染

在服务器上呈现的好处是,您可以使用Razor视图模板代码生成大量HTML,否则您必须在客户端上执行这些操作。您将获得Microsoft的API的一些额外好处以及将逻辑嵌入到HTML中的一些奇特语法,如果您不使用像AngularJS这样的客户端框架,这可能很有用。

使用服务器呈现并不能完全消除进行AJAX调用的需要,也不会阻止回发。