2

基本的に私がしようとしているのは、MVC を使用して 4 つの回答 (ラジオ ボタン) を持つ質問でフィードバック フォームを作成することです。

ビュー内 : 各回答のラジオボタンを使用して、質問と回答を表示できます。

コントローラーで:ここで混乱しています。

選択した質問とその回答をビューからコントローラーに送信したいと思います。

私の見解

@model  IEnumerable SQLOperation.Models.QuestionClass.Tabelfields


@{int i = 0;}


     @foreach (var item in Model)
     {
     using (Html.BeginForm("Question", "home", new {email=item.Email}))
     {   

         @Html.DisplayFor(modelItem => item.QuestionName,item)

         <br /><br />   
         if (item.Option1 != "")
         {
                    @Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1, item)                
                    @Html.DisplayFor(modelItem => item.Option1)
                    <br /><br />                
         }

         if (item.Option2 != "")
         {
                    @Html.RadioButtonFor(modelItem => item.SelectedOption, item.Option2)              
                    @Html.DisplayFor(modelItem => item.Option2)
                    <br /><br />
         }

         if (item.Option3 != "")
         {           
                    @Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option3)              
                    @Html.DisplayFor(modelItem => item.Option3)
                    <br /><br />
         }


         if (item.Option4 != "")
         {
                    @Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option4)             
                    @Html.DisplayFor(modelItem => item.Option4) 
                    <br /><br />     
         }
         i = (Int16)i + 1;


         if (Model.Count() == i)
         {
                <input name="btnsumbit" type="submit" value="Submit Feedback" 
                style="font-family:Segoe UI Light;font-size:medium;"/>
         }
     }
 }

私のコントローラー

 [HttpGet]
    public ActionResult Question(string email)
    {
        var tf = new QuestionClass.Tabelfields();

        IList<QuestionClass.Tabelfields> viewmodel = new List<QuestionClass.Tabelfields>();
        var q = QuestionClass.getallQuestion(email).ToList();

        foreach (SQLOperation.Models.Question item in q)
        {
            QuestionClass.Tabelfields viewItem = new QuestionClass.Tabelfields();

            viewItem.Email = item.Email;
            viewItem.QuestionID = item.QuestionID;
            viewItem.QuestionName = item.QuestionName;
            viewItem.Option1 = item.Option1;
            viewItem.Option2 = item.Option2;
            viewItem.Option3 = item.Option3;
            viewItem.Option4 = item.Option4;                
            viewmodel.Add(viewItem);
        }
         return View(viewmodel);
    }

    [HttpPost, ActionName("Question")]
    public void Question(string Email,QuestionClass.Tabelfields tf)
    {

    }

私のモデル:

public class QuestionClass

{

  public static FeedbackDatabaseDataContext context = new FeedbackDatabaseDataContext();
    public class Tabelfields : Question
    {
        //public decimal QuestionID { get; set; }
        //public string Email { get; set; }
        //public string QuestionName { get; set; }
        //public string Option1 { get; set; }
        //public string Option2 { get; set; }
        //public string Option3 { get; set; }
        //public string Option4 { get; set; }
        public int SelectedOption { get; set; }
    }


    public static List<Question> getallQuestion(string email)
    {
        var list = (from q in context.Questions where q.Email == @email select q);

        return list.ToList();
    }

}

質問が得られませんでした。コントローラーで適切な電子メールを含むオプションが選択されています。

コントローラーで取得するにはどうすればよいですか?

4

1 に答える 1

1

まず、ビューにブレークポイントを含めて、値が渡されているかどうかを確認します。

次に、メソッド シグネチャを次のように変更します。

 public void Question(string Email,QuestionClass.Tabelfields tf)

 public void Question(string email, QuestionClass.Tabelfields tf)

また、単純にこれを使用できた場合に、いくつかの奇妙な構文を使用したことがわかります ( m も MVC に新しいことを考慮して)。

@Html.DisplayFor(modelItem => item.QuestionName)

これの代わりに

@Html.DisplayFor(modelItem => item.QuestionName,item)

また、私はあなたのプロフィールを見ました。私はあなたが StackOverflow を初めて知っているので、StackOverflow へようこそ! これこれも読みたいと思うかもしれません。乾杯 !

アップデート :

これをラジオボタンの表示に使用しています...

@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1, item)

item.Option1 とは何ですか。Opion1,2,3,4 がコメントアウトされていることがわかります。それともまだ使っていますか?

これを実装する非常に簡単な方法は、次のようになります

@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option1")
@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option2")
@Html.RadioButtonFor(modelItem =>item.SelectedOption, "Option3")

または、

@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option1)
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option2)
@Html.RadioButtonFor(modelItem =>item.SelectedOption, item.Option3)

指定された値は item.Option1/2/3/4 に存在し、それらはすべて異なります。

于 2012-08-21T12:00:06.373 に答える