0

私は検証モデルクラスで以下を定義しました

public class Visit_Validation
{
   [Display(Name = "Assign to Doctor")]
   [Required(ErrorMessage= "Please select a Doctor")]
   public string DoctorID { get; set; }}

次に、DoctorIDSelectlistを次のように作成しました。

     public ActionResult Create(int patientid)
        {
            Visit visit = new Visit();
            var allusers = Membership.GetAllUsers();

           ViewBag.DoctorID = new SelectList(allusers, "Username", "Username");
return View(visit);
        } 

最後に、ビューで次のように定義dropdownlistします:-

 <div class="editor-label">
            @Html.LabelFor(model => model.DoctorID)
        </div>
        <div class="editor-field">
            @Html.DropDownList("DoctorID", String.Empty)
            @Html.ValidationMessageFor(model => model.DoctorID)
        </div>

しかし、私が直面している問題は、ユーザーがDoctorIDドロップダウンリストを空のままにしておくと、[Required(ErrorMessage= "Please select a Doctor")]エラーが表示されないということですか? それで、何がうまくいかないのでしょうか?

ブラジル

更新:- ここに完全なビューコードがあります:-

<h2>Create</h2>
@section scripts{
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>}

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Visit</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.VisitTypeID, "VisitType")
        </div>
        <div class="editor-field">
            @Html.DropDownList("VisitTypeID", String.Empty)
            @Html.ValidationMessageFor(model => model.VisitTypeID)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Date)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.Date, new { value = "FL", disabled = "disabled" })
            @Html.ValidationMessageFor(model => model.Date)
        </div>



        <div class="editor-label">
            @Html.LabelFor(model => model.Note)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Note)
            @Html.ValidationMessageFor(model => model.Note)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DoctorID)
        </div>
        <div class="editor-field">
            @Html.DropDownList("DoctorID", String.Empty)
            @Html.ValidationMessageFor(model => model.DoctorID)
        </div>

        <div class="editor-label">
            Visit Status
        </div>
        <div class="editor-field">
           @Html.TextBoxFor(model => model.VisitStatu.Description, new { value = "FL", disabled = "disabled" })

        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.CreatedBy)
        </div>
        <div class="editor-field">
           @Html.TextBoxFor(model => model.CreatedBy, new { value = "FL", disabled = "disabled" })
            @Html.ValidationMessageFor(model => model.CreatedBy)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

Post アクション メソッドのコードは次のとおりです。

   [HttpPost]
        public ActionResult Create(Visit visit)
        {
            if (ModelState.IsValid)
            {
                visit.StatusID = repository.GetVisitStatusByDescription("Assinged");
                visit.CreatedBy = User.Identity.Name;
                visit.Date = DateTime.Now;
                repository.AddVisit(visit);
                repository.Save();
                return RedirectToAction("Index");  
            }

            ViewBag.DoctorID = new SelectList(Membership.GetAllUsers(), "Username", "Username");
            ViewBag.StatusID = new SelectList(repository.FindAllVisitStatus(), "StatusID", "Description");
            ViewBag.VisitTypeID = new SelectList(repository.FindAllVisitType(), "VisitTypeID", "Description");
            return View(visit);
        }
4

1 に答える 1

0

検証をトリガーするには、POST コントローラー アクションにモデルをパラメーターとして使用させる必要があります。

[HttpPost]
public ActionResult Create(Visit visit)
{
    ...
}

または TryUpdateModel メソッドを使用します。

[HttpPost]
public ActionResult Create()
{
    Visit visit = new Visit();
    if (!TryUpdateModel(visit))
    {
        // validation failed
    }
    ...
}

フォームがこのコントローラ アクションに送信されると、デフォルトのモデル バインダーは、この Visit モデルに含まれる検証ルールを呼び出します。コントローラ アクションがこのモデルでまったく機能しない場合、そこに付けたデータ注釈を解釈するものは何もありません。

于 2012-04-25T06:10:47.193 に答える