我是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绑定的功能。
我们找到了两种方法:
在属于Accounts页面的MVC控制器内调用Web API控制器。
public ActionResult Account()
{
AccountsAPIController account = new AccountsAPIController();
UserAccount userAccount = account.GetAccountsDetails(234);
return View(userAccount);
}
获取帐户页面上的数据加载,然后手动将每个实体属性分配给相应的控件。这有效,但它忽略了强类型视图的概念。
$.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
});
请说明哪种方法是正确的,或者我们可以采用任何标准方法。
感谢您的时间。
答案 0 :(得分:0)
我发现自己多次回顾这个article on CodeProject(文章太大而无法复制)。
它向您展示了如何使用Html.BeginForm()
在页面上创建普通表单,然后如何将其转换为使用Ajax.BeginForm()
。这允许您使用AJAX提交页面的一小部分,同时仍然能够使用强类型模型,模型绑定和MVC的所有模型验证属性(包括所有Html.TextBoxFor()
,{{1} }助手等。)。