我有一个页面,其中包含用于注册新用户的表单。按下提交按钮后,我的控制器中会执行以下操作方法(检查用户是否已在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,在这里我会显示一条通知消息:
我现在无法做到这一点,因为我总是返回相同的视图。我尝试将action方法的返回类型变为void,但是显示空白页面。
我该如何解决这个问题?先感谢您。
答案 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
。