0

ドロップダウン リストでテンプレートを選択し、[OK] ボタンを押してフォームを投稿すると、DeleteTemplateListViewModel オブジェクトが作成され、現在の templateId が入力され、ModelState が有効になります。

ドロップダウン リストでデフォルト値の [テンプレートを選択] を選択し、[OK] ボタンを押してフォーム ポストを作成すると、DeleteTemplateListViewModel オブジェクトが作成され、ModelState が InValid になります。

ここまでは順調ですね。

しかし、削除アクションを変更して、selectedTemplateId である整数を受け入れるようにすると、選択した templateId に対して ModelState が有効になります。DropDownListFor で定義されているデフォルト値「テンプレートを選択」を選択すると、出力ウィンドウに次の例外が表示されます。

タイプ 'System.ArgumentException' の初回例外が System.Web.Mvc.dll で発生しました

viewModel の代わりにアクション パラメータとして整数を使用して、デフォルト値に対して ModelState が false/Invalid になるようにするにはどうすればよいですか?

@model ITMS.Web.Models.DeleteTemplateListViewModel

@using (Html.BeginForm("Delete", "Template"))
{ 
    @Html.ValidationSummary(false)      
    @Html.DropDownListFor(x => x.SelectedTemplateId, 
                               new SelectList(Model.DisplayList, "TemplateId", "Name"),
                               "Select a template", 
                               new { @class = "listviewmodel" })
}


public class DeleteTemplateListViewModel
{
    [Required(ErrorMessage = "No template selected.")]
    public int SelectedTemplateId { get; set; }
    public string Name { get; set; }
    public IEnumerable<TemplateViewModel> DisplayList { get; set; }
}

作品

[HttpPost]
public ActionResult Delete(DeleteTemplateListViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        int templateId = viewModel.SelectedTemplateId;
        _templateDataProvider.DeleteTemplate(templateId);
        return new JsonNetResult(new { success = true, templateId = templateId });
    }
    return LoadDeleteTemplates();
}

動作しません

[HttpPost]
public ActionResult Delete(int selectedTemplateId)
{
    if (ModelState.IsValid)
    {
        _templateDataProvider.DeleteTemplate(selectedTemplateId);
        return new JsonNetResult(new { success = true, templateId = selectedTemplateId});
    }
    return LoadDeleteTemplates();
}
4

1 に答える 1

0

まあ、intは実際には非値を取得できません。Delete メソッドを accept および に変更しますint?

MVC が int に対して実行できるモデル検証の種類がわかりません。追加のデータはありませんが、null かどうかを確認する必要があります。

于 2012-10-13T22:00:55.760 に答える