通过Ajax或MVC控制器设置强类型视图?

时间:2014-01-08 11:12:19

标签: asp.net-mvc-4 asp.net-web-api

我是MVC的新手,我们正在构建一个具有剃刀视图的MVC应用程序和用于从Repository层获取数据的Web API控制器。

现在,我们有一个登录屏幕,在成功进行身份验证后,我们希望将用户重定向到强类型的“帐户”页面。为了验证凭据,我们在按钮单击时进行Ajax调用,并根据结果,我们显示错误消息或在Ajax的成功方法中执行重定向。

$.ajax({
            type: 'post',
            url: '/api/User/Authenticate',
            datatype: 'json',
            success: function (isValid) {
                if (isValid)
                    window.location.href = "/User/Account";
            },
            failure: OnFailure
        });

我们对重定向和数据获取实现感到困惑。如上所述,“帐户”页面是具有“UserAccount”实体的强类型视图。我想填充这个实体,然后直接将其发送到Accounts页面,以便我可以有力地使用Model绑定的功能。

我们找到了两种方法:

  1. 在属于Accounts页面的MVC控制器内调用Web API控制器。

     public ActionResult Account()
     {
        AccountsAPIController account = new AccountsAPIController();
        UserAccount userAccount = account.GetAccountsDetails(234);
        return View(userAccount);
     }
    
  2. 获取帐户页面上的数据加载,然后手动将每个实体属性分配给相应的控件。这有效,但它忽略了强类型视图的概念。

     $.ajax({
              type: 'get',
              url: '/api/AccountsAPI/ GetAccountsDetails,
              datatype: 'json',
              data: {'userID': 234},
              contentType: 'application/json; ',
              success: function (data) {
    
                  // Assign data value to each and every control
                  $('#First_Name').val(data.First_Name);
                  $('#Phone_Number').val(data.Phone_Number);
                  // ..
              },
              failure: OnFailure
          });
    
  3. 请说明哪种方法是正确的,或者我们可以采用任何标准方法。

    感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我发现自己多次回顾这个article on CodeProject(文章太大而无法复制)。

它向您展示了如何使用Html.BeginForm()在页面上创建普通表单,然后如何将其转换为使用Ajax.BeginForm()。这允许您使用AJAX提交页面的一小部分,同时仍然能够使用强类型模型,模型绑定和MVC的所有模型验证属性(包括所有Html.TextBoxFor(),{{1} }助手等。)。