2016-12-19 13 views
-1

私は、編集ビューからコントローラへのドロップダウンの選択値を取得しようとしています。私は、 "{" の値がnullにすることはできません\ rを\名前nParameter。:アイテム "}" 同じエラーを取得しておく。ここMVCでのドロップダウンリストの値の取得

が私の見解です:

<div class="form-group"> 
    @Html.LabelFor(model => model.adminID, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.adminID, new SelectList(ViewBag.Admins, "Value", "Text"), htmlAttributes: new { @class = "form-control", @name = "admin" }) 
     @Html.ValidationMessageFor(model => model.adminID, "", new { @class = "text-danger" }) 
    </div> 
</div> 

私はgetアクションでSelectListのを作成しました。

var admins = from a in db.members 
        select new { name = a.student.Fname + " " + a.student.Sname, id = a.StudentID }; 

ViewBag.Admins = admins.Select(a => new SelectListItem 
{ 
    Text = a.name, 
    Value = a.id 
}).ToList(); 

ここにコントローラがあります。バインドしようとするプロパティの名前であるadminIDを使用しましたが、ページを投稿するとエラーが返されます。

public async Task<ActionResult> Edit([Bind(Include = "ClubId,ClubName,CreationDate,adminID")] Club club) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(club).State = EntityState.Modified; 
     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 
    return View(club); 
} 

エラーが返されるが

である "{" の値がnullにすることはできません\ rを\名前nParameter:アイテム "}"

任意のアイデアなぜadminIdにはしませんセーブ/バインド? enter image description here

ルートコンフィグ

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Clubs", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

あなたのルートはどのように見えますか? –

+0

@JesseMoreland、あなたがどういう意味かはっきりしていません。 –

+0

はコントローラ行為の定義と同様に例外行を表示します。plz – Steve

答えて

0

DropdownListForの名前がそうでなければ、FormCollectionを使用フォームインスタンスから値を取得し、プロパティに割り当て、オブジェクトのプロパティと同じ名前を持つ必要があり

0

ポストメソッドのパラメータにadminという値がないため、ドロップダウンリストに「admin」という名前を付けているので、ポストバックするとMVCは値を固定する場所を知らないと思います。

@nameを削除すると正常に動作するはずです。

@Html.DropDownListFor(model => model.adminID, new SelectList(ViewBag.Admins, "Value", "Text"), htmlAttributes: new { @class = "form-control" }) 

もう一つは、あなたはViewDataをにそれを渡した後、コントローラに新しい選択リストを作成しているので、あなたは、この時点でビューデータ内の選択リストを持っています。次にビューでは、別の選択リストを宣言しているので、1つの要素を持つSelectListのSelectListがあります。

+0

私は実際に誰かが示唆したようにこれを試みました。同じエラーが返されます。 –

+0

答えにさらに追加されました。 –

関連する問題