【发布时间】:2014-08-22 11:09:39
【问题描述】:
我真的不喜欢页面加载,我认为它们有损用户体验,所以我试图让我的 Web 应用程序高度 AJAX 化。
当用户点击“Add new”时,Javascript 会根据使用 Razor 的模型生成一个表单,代码如下:
<script type="text/javascript">
var strNewCategoryForm = '<div><i class="glyphicon glyphicon-folder-open rightfolderpadding"></i>@using (Html.BeginForm("AddCategory", "Password", FormMethod.Post, new { @class="newcategoryform", role = "form", id="[1]" })) { @Html.AntiForgeryToken() @Html.PasswordFor(m => m.Category_ParentID, new { type = "hidden", value = "0" }) @Html.PasswordFor(m => m.CategoryName, new { type = "text" }) <span class="btn-group groupalign"><a href="#" onclick="saveNewCategory(\'#[2]\');return false;" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-save"></i>Save</a></span> }</div>';
</script>
代码运行良好,Razor 能够在字符串中生成表单,所以我对这项工作没有任何问题。 但是,对于代码的可读性和易于开发而言,它并不是那么好。
我对 MVC 和 razor 还是很陌生,所以我只是想知道,有没有更好的或“MVC/Razor 标准”的方式来做这件事,我不知道?
编辑: 如果有人感兴趣,我已经使用了 Exception 的两个答案:
在局部视图中:
@model Secure_Password_Repository.Models.Category
<div><i class="glyphicon glyphicon-folder-open rightfolderpadding"></i> \
@using (Ajax.BeginForm("AddCategory", "Password", new AjaxOptions { HttpMethod="post", OnFailure="" }, new { @class="newcategoryform", role = "form", id="[1]" }))
{
@: \
@Html.AntiForgeryToken() @: \
@Html.HiddenFor(m => m.Category_ParentID, new { value = "0" }) @: \
@Html.TextBoxFor(m => m.CategoryName) @: \
@: <span class="btn-group groupalign"><a href="#" onclick="saveNewCategory(\'#[2]\');return false;" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-save"></i>Save</a></span> \
}</div>
在主视图中:
<script type="text/javascript">
var strNewCategoryForm = '@Html.Partial("_NewCategoryForm")';
</script>
局部视图中每行末尾的“\”告诉 JavaScript 每行是一个字符串值的延续。
【问题讨论】:
-
"我真的不喜欢页面加载" 这看起来很笼统。你到底是什么意思?您是否遇到过最初需要几秒钟才能加载的网页?
标签: c# javascript asp.net-mvc razor