1

Я разрабатываю 3 приложений ASP .Net MVC с помощью C# и SQL Server 2005.Значение передается NULL между View и контроллером в ASP MVC

В представлении, у меня есть DropDownList, который и кнопку.

Эта кнопка используется для перевода меня в другое место.

Я хочу передать значение выбранного элемента в раскрывающемся списке на контроллер, потому что он будет использоваться в другом действии.

Итак, я пытаюсь это сделать, используя 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); 

     } 

Примечание:

Элемент, выбранный в dropdowlist является SelectedProfile_Ga.

Действие app - это действие, выполняемое при нажатии кнопки в виде Applicationи в этом действии, где я хочу получить значения выбранного элемента.

EDIT

Просмотр Применение:

<%@ 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> 
+0

Ваши данные должны быть в модели, а не в сеансе. –

+0

@JeremyHolovacs нормально, но как я могу использовать значение 'SelectedProfile_Ga' в' ActionResult appl'? –

+0

использовать прослушиватель jquery в событии нажатия кнопки и собирать выпадающее значение. Затем отправьте это значение в перенаправление. –

ответ

0

У вас есть целый ряд проблем здесь:

  1. Url.Action ("Применение", "ProfileGa") отправляется в/Приложение нет/appl
  2. Javascript в вашей кнопке не вызывает постбэк, так что вы никогда не получите значение в контроллере
  3. Вы должны сильно рассмотреть вопрос о переходе к синтаксису бритвы
  4. Даже если то, что вы волшебно работали, вы только отправку id , но вы пытаетесь привязаться к FlowViewModel, почему бы просто не ожидать единственного значения , которое вы отправляете?

Я хотел бы сделать это вместо того, чтобы:

  1. Вы имеете форму, использовать его
  2. Alter контроллер только ожидать, что вы на самом деле проходит accross

Пример: Вид:

<% 
    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 
} 

Это решение может потребовать некоторых изменений с вашей стороны, как я не могу знать ваши типы данных, и я догадался, на имя вашего DropDownList.

+0

thx для ответа, но когда я изменяю определение кнопки ,,, момент, когда я нажимаю, он ударит действие 'appl', а не действие' Application', которое показывает страницу (HttpGet), и это приведет к возникновению этой ошибки: Представление «appl» или его мастер не было найдено или механизм просмотра не поддерживает найденные местоположения. Были обысканы следующие местоположения: –

+0

Я не уверен, что такое ProfileGa, но если это не имя вашего контроллера, я бы избавился от него в BeginForm(). Кроме того, возможно, из вашего вопроса неясно, на какой взгляд вы пытаетесь пойти? Я предположил, что вы пытаетесь перенаправить на/appl. Также обратите внимание, что я удалил атрибут [httpPost], поскольку я не видел необходимости в этом, учитывая то, что у вас есть. –

+0

yes, ProfileGa - мой контроллер Но приложение - это действие для отображения представления (как вы видите в его коде, оно содержит списки, которые я использовал для загрузки значения в dropdownlists) Однако действие 'appl' используется для записи значения в моей базе, когда я нажимаю кнопку в представлении 'Application' ,,, hold on, я поставлю код представления' Application' –

Смежные вопросы