POST方法后更新div

时间:2014-03-29 09:51:45

标签: asp.net-mvc-4

我有一个页面,其中包含用于注册新用户的表单。按下提交按钮后,我的控制器中会执行以下操作方法(检查用户是否已在DB中并在没有用户的情况下插入新用户)。

// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]

public ActionResult Register(RegisterViewModel model)
{
    int result = this.isUserInDB(model.Email);
    ViewBag.numberOfEmails = result;

    if (result == 0)
    {
        this.insertNewUserInDB(model.Name, model.Surname, model.Password, model.Email);
    }
    return View();  
}

现在我希望在表单的同一页面上有一个div,在这里我会显示一条通知消息:

  • 用户已在数据库中
  • 用户已插入db

我现在无法做到这一点,因为我总是返回相同的视图。我尝试将action方法的返回类型变为void,但是显示空白页面。

我该如何解决这个问题?先感谢您。

1 个答案:

答案 0 :(得分:1)

  

我现在无法做到这一点,因为我总是返回相同的观点。

这不是问题。在您的视图中,您可以使用一些条件逻辑:

if (Model.NewUserInserted) 
{
    <div>A new user was created</div>
}
else if (Model.UserAlreadyExists)
{
    <div>The specified user already exists</div>
}

当然,您现在应该编写视图模型:

public class MyViewModel
{
    public int NumberOfEmails { get; set; }
    public bool NewUserInserted { get; set; }
    public bool UserAlreadyExists { get; set; }
}

最初渲染此视图的控制器操作应该传递一个空模型:

return View(new MyViewModel());

并且你的POST动作应该设置相应的属性:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model)
{
    int result = this.isUserInDB(model.Email);
    var viewModel = new MyViewModel();
    viewModel.NumberOfEmails = result;

    if (result == 0)
    {
        this.insertNewUserInDB(model.Name, model.Surname, model.Password, model.Email);
        viewModel.NewUserInserted = true;
    }
    else
    {
        viewModel.UserAlreadyExists = true;
    }
    return View(viewModel);  
}

当然,您的视图应该强烈输入到视图模型中:

@model MyViewModel

你应该摆脱所有ViewBag