2016-05-19 3 views
0

チェックボックスが開いているので、自分のオプションがあり、選択した場合は、選択したアイテムの値を書きたいと思います。よく私は、任意のオプションをクリックし、それを提出するたびに、値がURLに表示されているが、私はそれを書き出すように見えるカント...MVC5ユーザーからチェックボックスの値を書き込む方法

ビュー(Index.cshtml):

@using vgsimulator.Models 
@model List<vgsimulator.Models.Album> 
@{ 
    ViewBag.Title = "Index"; 
    Album ka = new Album(); 
} 

@using (Html.BeginForm("Index", "Home", FormMethod.Get)) 
{ 
    for (var i = 0; i < Model.Count(); i++) 
    { 
     @Html.HiddenFor(it => it[i].Id) 
     @Html.DisplayFor(it => it[i].Name) 
     @Html.CheckBoxFor(it => it[i].Checked) 
    } 
    <input id="Submit1" type="submit" value="submit"/> 
    <p>@Viewbag.Values</p> //here we print values checked 
} 

モデル( Album.cs):

public class Album 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public bool Checked { get; set; } 
} 

コントローラ(HomeController.cs):あなたが選択した値を表示したい場合は

[HttpGet] 
public ActionResult Index() 
{ 
    var list = new List<Album> 
    { 
     new Album { Id = 1, Name = "Aquafina", Checked = false }, 
     new Album { Id = 2, Name = "Mulshi Springs", Checked = false }, 
     new Album { Id = 3, Name = "Alfa Blue", Checked = false }, 
     ..... 
    }; 
    return View(list); 
} 


[HttpPost] 
public ActionResult Index(List<Album> list) 
{ 
    //ViewBag.Values = x?; 
    return this.View(list); 
} 
+0

あなたのフォームはGETを使用しているため、データは実際に最初のIndex()アクションに送信されます – Kurorion

+0

@Kurorion hmm私はそれを得ることができません。そしてお返事 –

+0

あなたのフォームから 'FormMethod.Get'を取り除くと、' public ActionResult Index() 'の代わりに' public ActionResult Index(リストリスト) 'を呼び出すPOST経由で投稿します。 – Kurorion

答えて

0

それが戻っ

@Html.HiddenFor(m=> m[i].Name) 

をポストして、コンマを表示します

[HttpPost] 
public ActionResult Index(List<Album> list) 
{ 
    var selected = list.Where(x => x.Checked).Select(x => x.Name); 
    ViewBag.Values = String.Join(", ", selected); 
    return View(list); 
} 

にPOSTメソッドを変更するので、あなたはPOSTメソッドでで返すビューは、最初Nameプロパティに隠し入力を追加します<p>要素の中で選択されたすべての要素のリストを返します。

もちろん、このUIは意味をなさないが、コメントからは、選択した項目を取得するためのテストだったため、コードを保存してから保存してください。選択した項目を保存し、その後、UserIdと​​のためのフィールドを含むことになるUserAlbumsあなたのアプリのユーザーのために選択されたAlbumコレクションを保存したいと仮定すると、あなたは(例えば)テーブルを持っているかもしれませんが、あなたは

のようなものを使用します
[HttpPost] 
public ActionResult Index(List<Album> list) 
{ 
    var userId = ....; // get the ID of the current user 
    IEnumerable<int> selected = list.Where(x => x.Checked).Select(x => x.Id); 
    foreach(int id in selected) 
    { 
     db.Add(new UserAlbum() { UserId = userId, AlbumId = id }); 
    } 
    db.SaveChanges(); 
    return RedirectToAction(...); // redirect to another view 
} 
関連する問題