我有一个 asp.net mvc 网站,我在其中使用 C# 构建大部分页面,例如在给定来自我的 viewmodel 的一组数据的情况下构建 html 表
我也有很多 javascript 然后动态修改这些表(例如添加行)。
添加新行的 javascript 代码看起来与我在 C# 中的“渲染”代码非常相似,该代码首先用于构建 html 表。
每次我将 c# 代码更改为添加一个新字段时,我都必须记住返回到 javascript 代码来做同样的事情。
这里有更好的方法吗?
我有一个 asp.net mvc 网站,我在其中使用 C# 构建大部分页面,例如在给定来自我的 viewmodel 的一组数据的情况下构建 html 表
我也有很多 javascript 然后动态修改这些表(例如添加行)。
添加新行的 javascript 代码看起来与我在 C# 中的“渲染”代码非常相似,该代码首先用于构建 html 表。
每次我将 c# 代码更改为添加一个新字段时,我都必须记住返回到 javascript 代码来做同样的事情。
这里有更好的方法吗?
一种方法是将生成标记的逻辑公开为服务器上的 Web 服务,并让 JavaScript 通过 AJAX 调用而不是复制逻辑来获取该标记。
通过这种方式,您可以CreateRow
从 JavaScript 调用类似方法,该方法实际上会调用您在呈现页面时在服务器上使用的完全相同的逻辑。
与@Andrew Hare 接受和流行的回答相反。我宁愿只在 javascript 中实现标记生成(并重用它来构建 HTML 表),而不是只在 C# 中实现标记(当然,如果 javascript 也需要该功能)。
因为:
我知道 ASP.NET MVC 有很多很好的例子来说明如何将 HTML Helpers 用于您的控件,从而实现干净和快速的开发。但是,如果您最终还是创建了 Javascript 函数,那么我认为您应该再次考虑关注点分离,并坚持使用 Javascript 并丢弃 HTML Helpers 中的重复项。
因为如果你已经在创建行,扩展你的 Javascript 函数来创建整个表我猜应该不会那么难。以下是如何将数据传递给 Javascript,然后使用 Javascript 中已有的函数“createRow”的想法:
<script>
var data = [];
<% foreach (var item in Model) { %>
data.push({
Id: <%= Html.Encode(item.Id) %>
, Title: <%= Html.Encode(item.Title) %>
});
<% } %>
createTableHeader();
for (var i = 0; i < data.length; i++) {
createRow(data[i]);
}
createTableFooter();
</script>
看看 Scott Gu 的文章:ASP.NET MVC 2: Model Validation
基本上,您在模型属性级别定义验证,ASP.NET MVC 2 也可以自动生成正确的客户端验证。
不幸的是,这可能意味着您必须将所有内容重构为 MVC,但这里的很多人可能会认为这是一个加分项。
(免责声明:我根本没有使用过 ASP.NET MVC)