2013-02-23 1 views
1

J'ai essayé d'obtenir des listes déroulantes en cascade travaillant dans asp.net mvc4 .... Pour l'instant, je commence par ajax.beginform ... plus tard, je peux aller à droite jquery .. Mon problème est que la première (piste) ajax.beginform est appelée, elle appelle le contrôleur et ensuite celle-ci dirige vers la deuxième partie (rail) ... mais lorsque les rendus de SelectRailPartial.cshtml le font vue complète ... il n'est pas rendu avec l'étiquette div comme un remplacement .... J'ai essayé les différentes valeurs dans ajaxControls pour spécifier le remplacement, etc ... ils ne semblaient pas faire une différence ...mvc ajax.beginform ne fonctionne pas avec partialview

Je soupçonne que mon problème peut être dans les javascripts que je suis inclus .... J'ai stripp Je me rappelle que je dois garder les choses simples ... Quelqu'un peut-il voir ce que je fais de mal? S'il vous plaît ....

Mon (Mobile) Controller J'ai les deux méthodes suivantes:

//this is my main form that I am looking at... 
    public ActionResult LoadRailVehicle() 
    { 
     LoadRailVehicleInputModel model = new LoadRailVehicleInputModel(); 
     IRailService railService = new RailService(); 
     model.TrackList = railService.GetActiveRailTracks().ToList(); 
     return View(model); 
    } 


    [HttpPost] 
    public ActionResult SelectTrack(string selectedTrack) 
    { 
     LoadRailVehicleInputModel model = new LoadRailVehicleInputModel(); 
     //kludge for now... 
     model.RailCarList.Add("aaaa");   
     return PartialView("xSelectRailPartial", model); 
    } 

Mon LoadRailVehicle.cshtml

@using TBS.Etracs.Web.Main.Areas.Carrier.Models 
@model LoadRailVehicleInputModel 

@{ 
    ViewBag.Title = "Load Rail Vehicle"; 
} 

<scripts> 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.js")"     type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.intellisense.js")"  type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.10.1.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
</scripts> 

<table border="0"> 
    <tr> 
     <td>Track</td> 
     <td> : </td> 
     <td><div id="trackdiv">@Html.Partial("xSelectTrackPartial", Model)</div></td> 
    </tr> 
    <tr> 
     <td>Rail</td> 
     <td> : </td> 
     <td><div id="Raildiv">@Html.Partial("xSelectRailPartial", Model)</div></td> 
    </tr> 
</table> 

En xSelectTrackPartial.cshtml:

@using TBS.Etracs.Web.Main.Areas.Carrier.Models 
@model LoadRailVehicleInputModel 

<scripts> 
    <script src="@Url.Content("~/Scripts/jquery-1.10.1.min.js")"    type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"    type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
</scripts> 

@using (Ajax.BeginForm("SelectTrack", "Mobile", 
        new AjaxOptions 
        { UpdateTargetId = "Raildiv" 
           @* This is a control in theLoadRailVehicle.cshtml *@ 
         })) 
{ 
    @Html.DropDownListFor(p => p.SelectedTrack, 
          new SelectList(Model.TrackList),   
          new { id  = "trackdropdown", 
           name  = "trackdropdown", 
           Class = "dropdownstyle", 
           style = "width: 100px" , 
           onchange = "this.form.submit();"}) 
} 

dans xSelectRailPartial.cshtml

@using TBS.Etracs.Web.Main.Areas.Carrier.Models 
@model LoadRailVehicleInputModel 

<scripts> 
    <script src="@Url.Content("~/Scripts/jquery-1.10.1.min.js")"    type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"    type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
</scripts> 

@if (Model.RailCarList != null && Model.RailCarList.Count() > 0) 
{ 
    @Html.DropDownListFor(p => p.SelectedRailCar, 
          new SelectList(Model.RailCarList),   
          new { id  = "raildropdown", 
            name  = "raildropdown", 
            Class = "dropdownstyle", 
            style = "width: 100px" }) 
} 

Voici mon _layout.cshtml que je reçois via le _viewstart

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>@ViewBag.Title - Etracs</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 
     @* @Styles.Render("~/Content/css")  *@ 
     @* @Scripts.Render("~/bundles/modernizr") *@ 
     @* @Scripts.Render("~/bundles/jquery") *@ 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.js")"     type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.9.1.intellisense.js")"  type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery-1.10.1.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"    type="text/javascript"></script> 
     <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
     @RenderSection("scripts", required: false) 
    </head> 
    <body> 

     <header> 
      <div class="content-wrapper"> 
       <div class="float-right"> 
        <section id="login"> 
         @Html.Partial("_LoginPartial") 
        </section> 
       </div> 
      </div>  
     </header> 

     <div id="body">   
      <section class="content-wrapper main-content clear-fix"> 
       @RenderBody() 
      </section> 
     </div> 


     @Html.Partial("_ViewSwitcher") 
     <footer> 
      <div class="content-wrapper"> 
       <div class="float-left"> 
        <p>&copy; @DateTime.Now.Year - Turning Basin Services</p> 
       </div> 
      </div> 
     </footer> 

    </body> 
</html> 
+0

j'ai décidé de passer à droite Jquery depuis que j'ai lu que vous ne pouvez pas avoir un ajax.beginform à l'intérieur d'un html.beginform (dont j'aurais besoin éventuellement) .... – user2040849

+0

Après beaucoup de petits problèmes, j'ai eu la jquery de travail ..... pour ceux qui viennent après moi et lire ceci l'un des problèmes qui ne s'attendait pas était le besoin JsonRequestBehavior sur l'appel JsonResult ... – user2040849

+0

ie. public JsonResult GetRailCars (string selectedTrack) { IRailCarService railCarService = new RailCarService(); LoadRailVehicleInputModel model = new LoadRailVehicleInputModel(); Liste railCarList = nouvelle Liste (); si (selectedTrack! = Null && selectedTrack! = Chaîne.Empty) { // railCarList.Add ("aaaa"); railCarList.Add ("bbbb"); } return Json (railCarList, JsonRequestBehavior.AllowGet); } – user2040849

Répondre

0

Voir les commentaires .... je suis passé à droite jquery et avait beaucoup de problèmes avec cela (ce qui explique pourquoi je tentais l'ajax.beginform d'abord) ..... mais après un certain temps, j'ai éliminé tous les problèmes dans la jquery et l'appel fonctionne maintenant .... Avec l'avantage supplémentaire que je peux intégré thi s nouveau code à l'intérieur d'un Html.BeginForm

Je n'ai jamais comprendre quel était le problème dans le ajax.beginform qui a causé à ne pas créer à l'intérieur de l'écran partiel ...

Questions connexes