1

C# と SQL Server 2005 を使用して ASP .Net MVC 3 アプリケーションを開発しています。

ビューには、ドロップダウンリストとボタンがあります。

このボタンは、別のビューに移動するために使用されます。

別のアクションで使用されるため、ドロップダウンリストで選択したアイテムの値をコントローラーに渡したいです。

だから私はそれを使用しようとしましSessionたが、値はまだNULLを渡しました。

これはビューです:

<% using (Html.BeginForm("appl", "ProfileGa"))
   { %>

  <div><%:Html.Label("Gamme :")%>

  <%: Html.DropDownListFor(model => model.SelectedProfile_Ga, new SelectList(Model.Profile_GaItems, "ID_Gamme", "ID_Gamme"), new { @id = "gg" })%> 


  <input type="button" value="Appliquer" id="appliquer" onclick="location.href='<%: Url.Action("Application", "ProfileGa") %>'" />

  </div> 

これはコントローラーです:

[HttpGet]
        public ActionResult Application()
        {
            var vv = new FlowViewModel();


            vv.FaItems = new SelectList(db.Familles.ToList(), "ID_Famille", "ID_Famille");
            vv.SFItems = new SelectList(db.Sous_Familles.ToList(), "ID_SFamaille", "ID_SFamaille");
            vv.PItems = new SelectList(db.Produits.ToList(), "Code_Produit", "Code_Produit");
            vv.FFF = db.Familles.ToList();
            vv.SSS = db.Sous_Familles.ToList();
            vv.PPP = db.Produits.ToList();
            vv.NSItems = db.Ns_AFaires.ToList();

            this.Session["ggg"] = vv.SelectedProfile_Ga;
            return View(vv);


        }

[HttpPost]
        public ActionResult appl(FlowViewModel model)
        {




                Famille fam = new Famille();
                fam = db.Familles.Find(model.SelectedFamille);
                fam.ID_Gamme = model.SelectedProfile_Ga;
                db.Entry(fam).State = EntityState.Modified;
                db.SaveChanges();

                return View(model);

        }

ノート :

ドロップダウンリストで選択された項目はSelectedProfile_Gaです。

アクションappは、ビュー内のボタンをクリックしたときに実行されるApplication アクションであり、このアクションでは、選択したアイテムの値を取得したいと考えています。

編集

アプリケーションを表示:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.FlowViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Application
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Application</h2>
<% using (Html.BeginForm("appl", "ProfileGa")) { %>
    <body onload="charge()">

    <fieldset><legend>Veuillez choisir le type :</legend>
    <div>
        <input type="submit" value="Appliquer" id="appl"   />

        </div>

    </fieldset>

    <form id="form1" >

<h2><%= Html.Encode(ViewData["Message"]) %> </h2>
   <div>         
         <%:Html.Label("Famille :")%><%: Html.DropDownListFor(model => model.SelectedFamille, Model.FaItems, new { @id = "ff" })%>

   </div>

   <div>         
         <%:Html.Label("Sous Famille :")%><%: Html.DropDownListFor(model => model.SelectedSFamille, Model.SFItems, new { @id = "ss" })%>

   </div>

   <div>         
         <%:Html.Label("Produit :")%><%: Html.DropDownListFor(model => model.SelectedPdt, Model.PItems, new { @id = "pp" })%>

   </div>
    <div class="editor-label">
            <%: Html.LabelFor(model => model.Num_Serie)%>
        </div>
        <div class="editor-field">
            <%: Html.EditorFor(model => model.Num_Serie, new { @id = "nn" })%>

        </div>



</form>
4

1 に答える 1

0

ここにはいくつかの問題があります。

  1. Url.Action("Application", "ProfileGa") は /appl ではなく /Application に移動しています
  2. ボタンのJavaScriptはポストバックを引き起こさないため、コントローラーで値を取得することは決してありません
  3. カミソリ構文への切り替えを十分に検討する必要があります
  4. 魔法のように機能したとしても、ID を送信しているだけで、FlowViewModel にバインドしようとしている場合でも、送信している単一の値を期待しないのはなぜですか?

代わりにこれを行います:

  1. フォームがありますので、それを使用してください
  2. 実際に通過しているものだけを期待するようにコントローラーを変更します

例: ビュー:

<% 
   using (Html.BeginForm("appl", "ProfileGa"))
   { 
%>

  <div><%:Html.Label("Gamme :")%>

  <%: Html.DropDownListFor(model => model.SelectedProfile_Ga, new SelectList(Model.Profile_GaItems, "ID_Gamme", "ID_Gamme"), new { @id = "gg" })%> 

  <input type="submit" value="Appliquer" id="appliquer" />

  </div> 

コントローラ

public ActionResult appl(string SelectedProfile_Ga, FlowViewModel model)
{
  //SelectedProfile_Ga must match the NAME of your dropdownlist, if it does, it will contain the selected value
}

このソリューションでは、データ型を知ることができない可能性があり、ドロップダウンリストの名前を推測したため、一部の変更が必要になる場合があります。

于 2013-05-31T14:48:11.557 に答える