我的问题是:"如果模型状态无效,我怎样才能显示警告?"
我有一个HomeController,我检查ModelState.IsValid。我使用模态创建新项目。
// GET: Project/
public ActionResult Index()
{
using (var service = new Service1Client())
{
ProjectDto newProject = new ProjectDto();
newProject.StartTime = DateTime.Now;
var details = service.GetAllRequirementDetails();
var list = new SelectList(details, "Id", "Title");
var projects = service.GetAllProjects().ToList();
var vm = new ProjectIndexViewModel(list, newProject);
vm.Projects = projects;
return View(vm);
}
}
// POST: Project/Create/
[HttpPost]
public ActionResult Index(CreateProjectViewModel vm)
{
if (ModelState.IsValid)
{
using (var service = new Service1Client())
{
service.CreateProject(vm.NewProject);
return RedirectToAction(RedirectString);
}
}
return RedirectToAction(RedirectString);
}
我想添加
<div class="alert alert-danger" role="alert">
<a href="#" class="alert-link">Something went wrong!</a>
</div>
答案 0 :(得分:2)
如果从同一方法返回,或者如果模型状态返回重定向到next方法,则使用ViewBag,然后使用TempData。
以下是示例代码。
// POST: Project/Create/
[HttpPost]
public ActionResult Index(CreateProjectViewModel vm)
{
if (ModelState.IsValid)
{
using (var service = new Service1Client())
{
service.CreateProject(vm.NewProject);
return RedirectToAction(RedirectString);
}
}
ViewBag.Message = "Something went wrong";//if it is redirecting to some other action then use TempData
return View(vm);
}
在视图部分
@if(!string.isNotNullorEmpty(ViewBag.Message){
<div class="alert alert-danger" role="alert">
<a href="#" class="alert-link">
@ViewBag.Message</a>
</div>
}
答案 1 :(得分:0)
如果您没有通过ajax发布表单,您可以做的是设置一个标志以指示验证失败,并在您的页面中检查其值并执行您的js代码以显示引导警报。 / p>
如果ModelState.IsValid
为false,则不应重定向,应将发布的模型返回到同一视图。
[HttpPost]
public ActionResult Index(CreateProjectViewModel vm)
{
if (ModelState.IsValid)
{
using (var service = new Service1Client())
{
service.CreateProject(vm.NewProject);
return RedirectToAction(RedirectString);
}
}
ViewBag.DidValidationFail="Yes";
return View(vm);
}
在索引视图中,根据此标志的值
渲染div@if (ViewBag.DidValidationFail == "Yes")
{
<div class="alert alert-danger" id="errorMsg" role="alert">
<a href="#" class="alert-link">Something went wrong!</a>
</div>
}
如果您不想使用动态ViewBag
,则可以向viewmodel添加属性并设置该属性值并在剃刀中使用该属性(与我们对ViewBag项目的操作相同)
答案 2 :(得分:0)
您可以使用将您的消息放入else部分,然后返回到您的视图(使用已发布的模型),而不是重定向。我已经包含了一行,有助于查看调试时出错的地方。这样您就可以根据错误自定义邮件。
[HttpPost]
public ActionResult Index(CreateProjectViewModel vm)
{
if (ModelState.IsValid)
{
using (var service = new Service1Client())
{
service.CreateProject(vm.NewProject);
return RedirectToAction(RedirectString);
}
}
else
{
ViewBag.error = "Something went wrong";
var errors = ModelState.Values.SelectMany(x => x.Errors);
return View(vm);
}
}
在视图中:
<div class="alert alert-danger" role="alert">
<a href="#" class="alert-link">@ViewBag.error</a>
</div>