7

ModelState.isValid があらゆる方法で私に与える理由がわかりません。メールで何かを設定すると、true が返され、空のフィールドを入力すると、それも true が返されます。私の質問は、フィールドが空で、メールを書いたときに何も返さないときに true を返すにはどうすればよいですか?

次のビュー ファイルがあります。

<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>

コントローラーは次のとおりです。

//
// GET: /Account/EmailRequest
public ActionResult EmailRequest()
{
    return View();
}

[HttpPost]
public ActionResult EmailRequest(string email)
{
    if (ModelState.IsValid)
    {
        // save to db, for instance
        return RedirectToAction("AnotherAction");
    }
    return View();
}

私のモデルクラスは次のとおりです。

    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; }
    }
}
4

3 に答える 3

3

ビュー モデルをビューにバインドする必要があります。

EmailRequest モデルを次のようなよりわかりやすいものに変更します。

public class EmailRequestViewModel
{
     [Required(ErrorMessage = "Required")]
     public string Email { get; set; }
}

get アクション メソッドは次のようになります。

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)
}

これが役立つことを願っています。

于 2013-07-02T09:34:18.103 に答える
-1

Modelstat.IsValid でモデルをチェックできるようにするには、最初にモデルをバインダーにバインドする必要があります

    public ActionResult EmailRequest()
    {
           EmailRequest email = new EmailRequest();
           TryUpdateModel(email);
        if (ModelState.IsValid)
        {
            // save to db, for instance
            return RedirectToAction("AnotherAction");
        }
        return View();
    }
于 2014-08-08T09:45:56.767 に答える