【发布时间】:2014-08-28 10:14:54
【问题描述】:
在 ASP.Net 开发期间,我经常不确定是否应该使用 ajax 请求执行某些功能,而不是使用 JavaScript 在客户端上处理所有功能。我经常想使用 Jquery ajax 函数来加快开发速度并提高可维护性,即使我可以在不联系服务器的情况下获得相同的结果。
这是一个例子。在我的 MVC 视图中,我需要更新部分视图以响应按钮单击。这是我的局部视图的简化版本
@foreach (Requestbox.Code.XmlContentField xmlControl in Model.RequestContentControls)
{
if (Model.IsInEditMode)
{
ViewContext.Writer.Write("<div class='editDiv'>
<a href='#' onclick='EditClick()'>Edit</a>
<a href='#' onclick='DeleteClick()'>Delete</a>");
}
switch (xmlControl.ControlType)
{
case "TextBoxField":
<div class="clearfix">
@Html.DevExpress().Label(settings => {
settings.Name = xmlControl.FieldName + "Label";
settings.AssociatedControlName = xmlControl.FieldName + "TextBox";
settings.Text = xmlControl.LabelText;
}).GetHtml()
<div class="input">
@Html.DevExpress().TextBox(settings => {
settings.Name = xmlControl.FieldName + "TextBox";
MvcExtensionHelpers.SetTextBoxSettings(settings);
settings.ControlStyle.CssClass += " full-width";
}).GetHtml()
</div>
</div>
break;
case "Header":
string header = string.Format("<{0}>{1}</{0}>", xmlControl.HeaderType,xmlControl.Value);
@Html.Raw(header)
break;
}
if (Model.IsInEditMode)
{
ViewContext.Writer.Write("</div>");
}
}
单击编辑按钮时,我需要将每个部分包装在一个 div 中,并在其中添加 2 个带有 onclick 功能的锚元素。我可以通过使用 ajax 发布请求并将模型设置为“IsInEditMode 为 true”来做到这一点,这是我可以调用的代码,它将当前的局部视图替换为新的。
function EnableEditClick() {
$.post(rootDir + "Admin/EditClick",null,
function(partialViewResult){
$("#refTable").html(partialViewResult);
});
}
这是可以处理 ajax 请求的 Action
public ActionResult EditClick()
{
MyModel model = new MyModel();
model.IsInEditMode = true;
return PartialView("CustomRequest", model);
}
这是一种解决方案,另一种是通过使用 jquery 选择我需要的每个元素并直接插入锚元素来在客户端处理这一切。我还可以从视图中删除一些代码。所以像这样的东西(尚未测试此代码,但我希望你明白)
function EditClick()
{
var elements = $('.myTable .clearfix')
elemtns.append(' <a href='#' onclick='EditClick()'>Edit</a>
<a href='#' onclick='DeleteClick()'>Delete</a>');
}
我很纠结哪个更好的可维护性,就像我不必在 JavaScript 页面中编写 html 的 ajax 方式一样,我认为在修改代码时它会更清晰、更易读。但是,当我可以处理客户端上的所有请求时,我会向服务器使用不必要的请求。
所以我的问题是,如果可能的话,我是否应该始终在客户端上做所有事情,即使是为了可维护性。对我的示例的任何反馈也非常感谢。
【问题讨论】:
标签: c# javascript asp.net-mvc partial-views maintainability