这是一个奇怪的问题,但我可以使用一些方向
我一直在研究一个使用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
答案 0 :(得分:1)
JavaScript / JQuery与Razor的目的不同。 Razor在服务器上生成页面,一旦客户端收到它,Razor就完成了。
使用JSON是一个额外的开销,而不是传统的做网站的方式,但在某些情况下可能是最好的。如果您只是一次调用JSON,那么让Razor进行生成可能会更好,并且可以将JavaScript用于需要在客户端进行更改的内容。
您可以使用JSON字符串作为模型,这样您就不必第一次点击服务器了:
@model string
<!-- ... -->
<script>
var model = @Html.Raw(Model); // Raw JSON
</script>
在上面的更改中,您展示了一种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,页面可以在从服务器加载其他数据时开始在客户端上呈现。它是异步的,可以并行运行。这提供了更好的感知性能。使用服务器呈现时,必须在用户看到任何客户端呈现之前在服务器上完全呈现页面。
在服务器上呈现的好处是,您可以使用Razor视图模板代码生成大量HTML,否则您必须在客户端上执行这些操作。您将获得Microsoft的API的一些额外好处以及将逻辑嵌入到HTML中的一些奇特语法,如果您不使用像AngularJS这样的客户端框架,这可能很有用。
使用服务器呈现并不能完全消除进行AJAX调用的需要,也不会阻止回发。