2

取得しています: タイプ 'System.String' からタイプ 'System.Web.Mvc.SelectListItem' へのパラメーター変換に失敗しました。これは、タイプ コンバーターがこれらのタイプ間で変換できないためです。 コントローラーにフォームを投稿するときのエラー、以下は私が使用しているコードです:

モデル

 public IList<SelectListItem> Gender { get; set; }
 public IList<SelectListItem> Disablity { get; set; }

コントローラ

public ActionResult Index()
        {
            FormViewModel objStudentModel = new FormViewModel();

            List<SelectListItem> genderNames = new List<SelectListItem>();
            genderNames.Add(new SelectListItem { Text = "Male", Value = "1" });
            genderNames.Add(new SelectListItem { Text = "Female", Value = "2" });
            genderNames.Add(new SelectListItem { Text = "Prefer not to say", Value = "3" });

            objStudentModel.Gender = genderNames1;
            objStudentModel.Disablity = genderNames1;
            return PartialView("ApplicationForm", objStudentModel);

        }

 [HttpPost]
        public ActionResult HandleFormSubmit(string[] gender, string[] disability, FormViewModel model)
        {
            //model not valid, do not save, but return current umbraco page
           if (ModelState.IsValid == false) // this always comes false 
           {
                return CurrentUmbracoPage();
           }
           string form = "Values + Environment.NewLine;"
           if (gender != null)
            { form += "Gender: " + gender[0] + Environment.NewLine; }
            else
            { form += "Gender: " + "Prefer not to say" + Environment.NewLine; }
            if (disability != null)
            { form += "Disability: " + disability[0] + Environment.NewLine; }
            else
            { form += "Disability: " + "Prefer not to say" + Environment.NewLine; }
            return RedirectToCurrentUmbracoPage();
         } 

意見

using (Html.BeginUmbracoForm<FormSurfaceController>("HandleFormSubmit"))
    {

        //var errors = ModelState.Values.SelectMany(v => v.Errors);

        @Html.ValidationSummary();
<div class="col-12 col-sm-12 col-lg-12 ">
                  <label>Are you:</label>
              @foreach (var names1 in @Model.Gender)
              {
                  var tdId = "rd" + names1.Value;
               <input type="radio" id="@tdId" class="chkclass" value="@names1.Text" name="gender" style="padding-right:5px;"/>
                            @names1.Text
                      }

                </div>

            </div>

 <div class="col-12 col-sm-12 col-lg-12 ">
                  @foreach (var names in @Model.Disablity)
                {

                var tdId = "rd" + names.Value;
                   <input type="radio" id="@names.Value" class="chkclass" value="@names.Text" name="disability" style="padding-right:5px;"/>
                    @names.Text
                  }

                </div>}

Visual stdio を使用してデバッグしましたが、モデル状態に失敗している性別リストでエラーが生成されています。私が間違っているアイデアはすべて、アプローチ内で可能なすべての解決策を試しましたが、成功しませんでした。

ありがとう

4

1 に答える 1

1

モデルのプロパティはGenderDisablityフォームの投稿を送信するときに競合します。MVC は、無線入力の選択された値 (タイプはstring[]) を ViewModel プロパティ タイプに変換しようとします。IList<SelectListItem> Gender

選択した値の名前を変更するか、新しいプロパティを追加します

モデル プロパティ

public IList<SelectListItem> Gender { get; set; }
public IList<SelectListItem> Disablity { get; set; }
public string[] SelectedGender { get; set; }
public string[] SelectedDisablity { get; set; }

意見

入力の名前を「SelectedGender」および「SelectedDisablity」に変更します

@foreach (var names1 in @ViewBag.Gender)
{
    var tdId = "rd" + names1.Value;
    <input type="radio" class="chkclass" value="@names1.Text" name="SelectedGender" />
    @names1.Text
}

アクション

アクションパラメータにも

  public ActionResult HandleFormSubmit(string[] selectedGender, string[] selectedDisability, FormViewModel model){ //...
于 2013-11-12T09:27:12.157 に答える