質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

20909閲覧

ラジオボタンの値の取得について(ASP.NET MVC)

_Mar85

総合スコア13

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/10/24 09:46

編集2016/10/25 01:50

###前提・実現したいこと
ASP.NET MVC5にて簡易な入力画面と蓄積したデータの一覧画面を開発しています。
ASP.NET 4.5.2のMVCテンプレートを利用しています。
モデル定義後、「Entity Frameworkを使用した、ビューがあるMVC5コントローラー」を利用し、コントローラとビューを自動生成しています。

実現したいこと:ラジオボタンでチェックされた項目の値を取りたい。

###発生している問題・エラーメッセージ
画面上でラジオボタン「B」を選択しても、取得した値が想定と異なり「A」となる。
※一覧画面上でも、デバッグモードでも同様に、一つ目の選択肢の値が取得されてしまう。
###追記###
上記動作を確認した手順は以下の通りです。
Controllerの下記行にブレークポイントを設定し、デバックを実行(F5)しました。入力画面にてラジオボタン「B」を選択し、DBへの保存処理を実行したところで変数に設定された値を確認したところ「A」がセットされていた。

!イメージ説明

###該当のソースコード

C#

1View 2@using (Html.BeginForm()) 3{ 4 @Html.ValidationSummary(true) 5<div class="form-horizontal"> 6<div class="form-group"> 7 @Html.LabelFor(model => model.TEST, htmlAttributes: new { @class = "control-label col-md-2" }) 8 <div class="col-md-10"> 9 <div class="radio-inline"> 10 @Html.RadioButtonFor(model => model.TEST, "A", new { tabindex = 1 })A 11 </div> 12 <div class="radio-inline"> 13 @Html.RadioButtonFor(model => model.TEST, "B", new { tabindex = 2 })B 14 </div> 15 @Html.ValidationMessageFor(model => model.TEST, "*", new { @class = "text-danger" }) 16 </div> 17 </div> 18 </div> 19}

C#

1Model 2public class Test 3 { 4 [Required] 5 [Display(Name = "TEST")] 6 public string TEST { get; set; } 7 }

C#

1Controller 2public JsonResult Create(Main main) 3 { 4 try 5 { 6 if (ModelState.IsValid) 7 { 8 if (main.Id > 0) 9 { 10 var CurrentSUb = db.Subs.Where(p => p.Id == main.Id); 11 12 foreach (Sub ss in CurrentSUb) 13 db.Subs.Remove(ss); 14 15 foreach (Sub ss in main.Subs) 16 db.Subs.Add(ss); 17 18 db.Entry(main).State = EntityState.Modified; 19 } 20 //Perform Save 21 else 22 { 23 db.Mains.Add(main); 24 } 25 26 db.SaveChanges(); 27 28 return Json(new { Success = 1, Id = main.Id, ex = "" }); 29 30 } 31 else 32 { 33 return Json(new { Success = 2, ex = "Required items are not entered." }); 34 } 35 } 36 catch (Exception ex) 37 { 38 return Json(new { Success = 0, ex = ex.ToString() }); 39 } 40 }

###試したこと
name属性やid属性を付与してみたりしましたが、結果は変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/24 11:33

「取得した値が想定と異なり」というのはどのように確認していますか? 具体的に説明してください。
guest

回答1

0

ベストアンサー

Controllerの下記行にブレークポイントを設定し、デバックを実行(F5)しました。入力画面にてラジオボタン「B」を選択し、DBへの保存処理を実行したところで変数に設定された値を確認したところ「A」がセットされていた。

その説明では分からないです。

「変数に設定された値」の「変数」というのは具体的に何ですか? コントローラーのアクションメソッド Create の中に定義されているものですか?

だとして、そもそもアクションメソッド Create はブラウザから送信されてきたラジオボタンの value を受け取れるようになってないので「変数に設定」ということはできないはずです。

なぜかと言うと・・・

ビューからは以下のような html コードがレンダリングされてブラウザに送られます。

<div class="radio-inline"> <input id="TEST" name="TEST" tabindex="1" type="radio" value="A" />A </div> <div class="radio-inline"> <input id="TEST" name="TEST" tabindex="2" type="radio" value="B" />B </div>

ブラウザで A を選択してから form を submit すると TEST=A という文字列がサーバーに送信されてきます(B を選択すると TEST=B になります)。

Create(Main main) の Main というのは何だか分かりませんが、モデルに定義した public class Test ではないですよね。

とすると、Create(Main main) ではブラウザから送信されてきた "A" または "B" は取得できないです。

試しに、Create アクションメソッドの引数に string test というのを追加して Create(Main main, string test) として試してみてください。

ビューの画面(上の html コード)のポストで Create アクションメソッドが正しく呼び出されているのであれば、引数 string test にラジオボタンの選択結果("A" または "B")を取得できるはずなので、デバッガを使って調べてください。

投稿2016/10/25 04:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問