将Webform应用程序转换为MVC

时间:2014-10-21 17:55:59

标签: javascript jquery ajax asp.net-mvc

我正在将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变量分配每个单独的文本框/下拉列表等的所有行。

1 个答案:

答案 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!");
            }
        }
    });