我正在将ASP.NET WebForm应用程序转换为ASP.NET MVC应用程序并且是MVC的新手,我正在努力确保我这样做。
目前,在我的WebForm应用程序中,它是使用jQuery驱动的AJAX,并在后面的C#代码中调用WebMethods。目前,WebForm现在如何工作可能是一个页面,其中包含一些需要填写并保存到数据库的字段。为此,我们有一个HTML表单和一个保存按钮。按下按钮时,会调用此javascript函数:
function SaveForm()
{
if (!ValidateForm())
return;
ShowWaitingOverlay();
var params = {};
params.firstName = $('#<%= txtFirstName.ClientID %>').val();
params.lastName = $('#<%= txtLastName.ClientID %>').val();
params.address1 = $('#<%= txtAddress1.ClientID %>').val();
params.address2 = $('#<%= txtAddress2.ClientID %>').val();
// ... many more just like above
$.ajax({
type: "POST",
url: "Hosts.aspx/SaveHost",
data: params,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
HideWaitingOverlay();
if (msg.d == "0") {
alert("Save Failed!");
}
}
});
}
此函数将对ASP.NET Web方法执行AJAX调用,该方法可能与此类似:
[WebMethod]
public static string SaveForm(string firstName, string lastName, string address1, string address2)
{
var host = new BusinessLayer.HostApplication();
host.FirstName = firstName;
host.LastName = lastName;
host.Address1 = address1;
host.Address2 = address2;
host.Save();
return host.HostId.ToString();
}
当然,为简洁起见,还省略了其他不相关的细节,但这是一般性的想法。
我的问题是,转换此内容的正确“MVC方式”是什么?我认为很多这些代码会消失和/或隐藏在数据模型中。我不认为有必要为params
变量分配每个单独的文本框/下拉列表等的所有行。
答案 0 :(得分:0)
您可以使用一个获取DTO
对象的action方法并返回Json结果。在此操作方法中,您可以调用业务层来继续流程。样本:
[HttpPost]
public ActionResult SaveForm(CustomerDTO input)
{
var host = new BusinessLayer.HostApplication();
host.FirstName = input.FirstName;
// oth properties
host.Save();
return Json(new {success = host.HostId != 0});
}
你的DTO可能是:
public class CustomerDTO
{
public string FirstName { get; set; }
// other properties
}
在客户端,你可以试试这个:
$.ajax({
type: "POST",
url: "@Url.Action("SaveForm", "ControllerName")",
data: $("#formId").serialize(),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(result) {
if (result.success)
{
HideWaitingOverlay();
}
else
{
alert("Save Failed!");
}
}
});