gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 4/MVVM/Web API 的良好结构?

转载 作者:行者123 更新时间:2023-12-03 10:16:15 24 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

8年前关闭。




Improve this question




我有一个 .NET MVC 4 项目,刚刚开始 Kendo UI MVVM 框架。 MVC 使用 ViewModel 将数据从 Controller 发送到 View 。我通过 MVVM 框架管理我的所有客户端对象,并使用 JSON 对它们进行序列化并将它们发送回我的 Controller 。

目前,我使用 MVC ViewModel 返回页面上的静态数据,并使用 jquery 调用来获取页面上所需的任何动态数据。我发现有两种检索数据的方法令人困惑。 (如果我觉得它令人困惑,想象下一个必须在我的代码中工作的开发人员)

我发现通过 ViewModels 将数据发送到 View 有点没用,因为我可以轻松地拥有一个结构,在我的 javascript 代码中按需查询 Controller (通过 Web API)并将其直接保存到我的 MVVM View 模型中。

我看到在我的 UI 中使用 MVVM 框架有很多优势,它使控件绑定(bind)变得更加容易。

我的问题:

将数据从 Controller 获取到 MVVM ViewModel 的最佳方式是什么?

我觉得使用 MVC ViewModel 是重复工作,因为我可以通过 ajax 请求查询我的 Web API,而不是将我的 MVC ViewModel 转换为我的 MVVM JS ViewModel。

永远不要将 MVC viewModel 返回到我的 UI 并始终使用客户端 Web API 调用来检索所有数据是否是一种好方法?

谢谢,

尼古拉斯

最佳答案

Would it be a good approach to never return a MVC viewModel to my UI and always use client side Web API calls to retrieve all data?



我会说这取决于您的用例。

您当然可以返回页面在 MVC 模型中显示时需要呈现的数据。请记住,MVC 模型被渲染到服务器上生成的 HTML 页面中。这意味着这些值可以在返回给客户端之前直接注入(inject) HTML。

另请记住,如果您必须多次访问服务器,则可能需要更长的时间才能完全呈现您的页面;一次获取 HTML,然后为每个 Kendo 小部件获取一次异步数据。

也就是说,我通常最终会按照你说的做......只需渲染一个没有模型的 MVC View ,然后让 Kendo UI 小部件在页面加载后获取它们的数据。

但实际上,这有点取决于您的数据。如果您的 MVC 模型包含:
public string Title { get; set; }

在 Razor 中,你有:
<h1>@Title</h1>

那么这并不是我想要异步重新获取该数据的情况。在这些情况下,我通常会做一些 hacky 的事情,并将值放入页面中:
<script type="text/javascript">
window.viewData = window.viewData || {};
window.viewData.Title = "@Title"
</script>

<h1 data-bind="text: Title"></h1>

<script src="viewmodel.js"></script>

然后在 viewmodel.js 文件中(我从返回的 HTML 中创建了一个单独的文件,以便它可以被浏览器缓存)
(function (viewData) {
var viewModel = kendo.observable({
Title: viewData.Title
});

kendo.bind($("body"), viewModel);
})(window.viewData);

这只是我自己的方法。它不一定适用于所有情况。这一切都取决于您从哪里以及从多少中提取什么数据。

关于asp.net-mvc - ASP.NET MVC 4/MVVM/Web API 的良好结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com