C# MVC4。ModelState.IsValid始终返回true
我不明白为什么ModelState.isValid在所有方面都给我。我在email returns true中设置了一些内容,I pùt为空字段,它也会返回true。我的问题是,当字段为空且在我写电子邮件时什么也没有时,我必须做什么才能返回true 我有下一个视图文件:C# MVC4。ModelState.IsValid始终返回true,c#,asp.net-mvc,asp.net-mvc-4,modelstate,C#,Asp.net Mvc,Asp.net Mvc 4,Modelstate,我不明白为什么ModelState.isValid在所有方面都给我。我在email returns true中设置了一些内容,I pùt为空字段,它也会返回true。我的问题是,当字段为空且在我写电子邮件时什么也没有时,我必须做什么才能返回true 我有下一个视图文件: <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <div style="padding-top
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div style="padding-top:5px;clear:both;"></div>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Email usuario</legend>
<div class="editor-field">
<%: Html.TextBoxFor(m => m.Email) %>
<%: Html.ValidationMessageFor(m => m.Email) %>
</div>
<input type="submit" value="Enviar Email" />
</fieldset>
<% } %>
<div style="padding-top:5px;clear:both;"></div>
</asp:Content>
我的模范班是:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Web.Security;
namespace PortalClient.Models
{
public class EmailRequest
{
[Required(ErrorMessage = "required")]
public string Email { get; set; }
}
}
将post操作的签名从
string email
更改为EmailRequest model
,然后检查状态。e、 g
[HttpPost]
public ActionResult EmailRequest(EmailRequest model)
{
if (ModelState.IsValid)
{
// save to db, for instance
return RedirectToAction("AnotherAction");
}
return View();
}
您需要将视图模型绑定到视图 将EmailRequest模型更改为更具描述性的模型,如:
public class EmailRequestViewModel
{
[Required(ErrorMessage = "Required")]
public string Email { get; set; }
}
您的get action方法如下所示:
public ActionResult EmailRequest()
{
EmailRequestViewModel viewModel = new EmailRequestViewModel();
return View(viewModel);
}
您的事后处理方法:
public ActionResult EmailRequest(EmailRequestViewModel viewModel)
{
// Check for null view model
if (!ModelState.IsValid)
{
return View(viewModel);
}
// Do whatever you need to do
return RedirectToAction("List");
}
然后是你的观点。请原谅ASP.NET MVC 4代码,MVC 2是史前版本:)这只是您观点的一部分:
@model YourProject.ViewModels.EmailRequestViewModel
@using (Html.BeginForm())
{
@Html.TextBoxFor(x => x.Email)
@Html.ValidationMessageFor(x => x.Email)
}
我希望这会有所帮助。您需要先用活页夹绑定模型,才能通过Modelstat.IsValid进行检查
public ActionResult EmailRequest()
{
EmailRequest email = new EmailRequest();
TryUpdateModel(email);
if (ModelState.IsValid)
{
// save to db, for instance
return RedirectToAction("AnotherAction");
}
return View();
}
如果您将post操作的签名从
string email
更改为EmailRequest model
,然后检查状态,您会看到什么结果?[HttpPost]公共操作结果EmailRequest(EmailRequest email){If(ModelState.IsValid){//save to db,例如return RedirectToAction(“AnotherAction”);}return View();}你建议我使用的函数我将字符串改为EmailRequest,它返回nullOk我得到了上一条评论的解决方案,我必须在EmailRequest中添加模型。现在它可以工作了。谢谢。我添加了我的评论作为解决方案,如果它解决了你的问题。从遥远的将来开始,谢谢你的回答。巧妙地解决了我的难题。
public ActionResult EmailRequest()
{
EmailRequest email = new EmailRequest();
TryUpdateModel(email);
if (ModelState.IsValid)
{
// save to db, for instance
return RedirectToAction("AnotherAction");
}
return View();
}