1

複数のデータ(おそらく2つのHtml.DropDownListで選択された値)をMVCビュー(.aspx)からMVCコントローラーアクションメソッドに渡す必要があります。どういうわけかHtml.Hiddenformからだと思いますが、どうやって?

選択した値をHtml.DropDownListから取得して、Html.Hidden( "paramName"、MvcStringSelectedValue)としてコントローラーのアクションに渡すことができません。

私のコードは:

        based on<br />

        <%: Html.DropDownList("Semester")%>
        <%= Html.Hidden("strSemesterToBaseOn",returnedValueFromAbove)%>

        <%: Html.ValidationSummary(true) %>           
        <input type="submit" value="Clone" />

    <% } %>
<br/><br/>

「送信」の入力タグを2回書き込む必要がありますか、それとも1回だけ書き込む必要がありますか?

編集(追加コード)

コントローラーのアクションメソッド:

[HttpPost]
public ActionResult CloneSemesterData(string strSemesterToOrganize, string strSemesterToBaseOn)
{

     .............................................................
     ..............................      
}

ここ(別のコントローラーの方法)は、学期の値で満たされたドロップダウンリストです

   public ActionResult DepartmentAdministration()
   {
      // Get list of semesters
      var lr = new ListRepository();
      ViewData["Semester"] = new SelectList(lr.ListSemester(3));  //this ListSemester(3) will generate the list with 3 strings ( e.g "WS 2012", "SS2010")

      return View();
   }

.aspxファイルのビューコードは次のとおりです。

//これはradioButton="Clone"が選択されたときに実行されます

    <% using (Html.BeginForm("CloneSemesterData", "CourseNeededHours")) 
    {%>
        <%= Html.DropDownList("Semester")%> // this is First drop down list box , from which selected value , I want to transfer as 1st parameter of controller's action method

        <%: Html.ValidationSummary(true) %>           

        based On 

        <%= Html.DropDownList("Semester")%> //this is Second drop down list box, from which selected value, I want to transfer as 2nd parameter of controller's action method.
          <input type="submit" value="Clone" />

    <% } %>

エラー:

さて、編集2を使用して修正した後:下に赤い線が表示されます

どういうわけかViewData["SemesterList"]を認識していないので...

"System.Web.Mvc.HtmlHelperには、'DropDownList'の定義が含まれておらず、最適な拡張メソッドがオーバーロードされています' System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper、string、System.Collections。 Generic.IEnumerable')にいくつかの無効な引数があります」。

今、それが明らかになることを願っていますが、まだあいまいです、それでは私に知らせてください。

よろしくウスマン

4

2 に答える 2

1

ここで何を尋ねているのかよくわかりません。ドロップダウンで選択した値を投稿するために、非表示フィールドは必要ありません。あなたのドロップダウン リスト コードは、そもそも無効です。

通常、次のようなものがあります。

<%= Html.DropDownList("SemesterToOrganize", GetSemesterToOrganize()) %>
<%= Html.DropDownList("SemesterToBaseOn", GetSemesterToBaseOn()) %>

そしてあなたのコントローラーで:

[HttpPost]
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) {
    // your code.
}

編集:

あなたが私たちに言ったことに基づいています。ドロップダウンリストと同じ名前でリストを ViewData に追加しているため、DropDownList にデータを入力する MVC の動作に依存しています。これはうまくいきません。各ドロップダウン リストを個別に設定する必要があります。

コントローラーで、次のようにします。

public ActionResult MyAction ()
{
    ViewData["SemesterList"] = // list of semesters

    return View();
}

次に、あなたの見解では次のようになります。

<%= Html.DropDownList("SemesterToOrganize", ViewData["SemesterList"]) %> 
<%= Html.DropDownList("SemesterToBaseOn", ViewData["SemesterList"]) %> 

次に、投稿方法

[HttpPost] 
public ActionResult MyAction(string SemesterToOrganize, string SemesterToBaseOn) { 
    // your code. 
} 

自分のやり方でできると言い続けていては、問題は解決しません。各ドロップダウンには独自の一意の ID が必要です。そうしないと、正しく投稿されません。この問題を解決する唯一の方法は、それぞれに固有の ID を与えることです。これにより、データを自動的に取得するドロップダウンの動作が中断されるため、データのリストを明示的に指定する必要があります。

ですから、これが問題の重要でない部分であると主張するのはやめてください。そうではありません。それが問題の鍵です。

EDIT2:

上記のコードに基づいて:

<%= Html.DropDownList("strSemesterToOrganize", (SelectList)ViewData["Semester"]) %>
<%= Html.DropDownList("strSemesterToBaseOn", (SelectList)ViewData["Semester"]) %>

それだけで十分です

もしあなたが私たちにこれを渡したばかりで、反論しなかったなら、これはずっと簡単に解決できただろう.

于 2012-04-08T23:30:34.867 に答える
1
    // Try this. Change names and put in the appropriate namespace. 
    //Your view
    @model MvcApplication2.Models.CloneSemesterDataViewModel 
    @Html.LabelFor(x => x.SemesterToOrganize)
    @Html.DropDownListFor(x => x.SemesterToOrganize, Model.ListofSemestersToOrganize)
    --------
    @Html.LabelFor(x => x.SemesterToBaseOn)
    @Html.DropDownListFor(x => x.SemesterToBaseOn, Model.ListofSemestersToBaseOn)

    //view model
    namespace MvcApplication2.Models
    {
        public class CloneSemesterDataViewModel
        {
            public string SemesterToOrganize { get; set; }
            public IEnumerable<SelectListItem> ListofSemestersToOrganize
            {
                get
                {
                    return new List<SelectListItem> { new SelectListItem { Text = "SS2012" , Value = "SS2012"} };
                }
            }

            public string SemesterToBaseOn { get; set; }
            public IEnumerable<SelectListItem> ListofSemestersToBaseOn
            {
                get
                {
                    return new List<SelectListItem> { new SelectListItem { Text = "SS2012", Value = "SS2012" } };
                }
            }
        }
    }


    ----------
    Controller.

    [HttpPost]
    public ActionResult CloneSemesterData(CloneSemesterDataViewModel viewModel)
    {
       //viewModel.SemesterToBaseOn
       //viewModel.SemesterToOrganize
    }

   // This should do the trick.
于 2012-04-09T16:27:09.083 に答える