2009-07-27 8 views
-2

J'étudie le framework Microsoft ASP MVC. Voici quelque chose d'étrange de ma page.Commandes non actualisées dans ASP.net MVC

J'ai deux liste déroulante sur la page. Le premier envoie le formulaire en retour, en passant les paramètres au contrôleur. Le contrôleur met à jour la deuxième liste déroulante et d'autres contrôles, comme deux zones de texte. Je passe les données aux viewdata. Et les assignés aux contrôles (SelectList à DropDownList, et chaîne à TextBox). Mais ces contrôles restent comme avant le poste. Comment puis-je résoudre ce problème? Merci d'avance!

Cordialement

Edit:

Merci! Voici mon code:

Vue:

<script type="text/javascript" language="javascript"> 
    function Postback() { 
     var control = document.getElementById("Country"); 
     var parameter = document.getElementById("CountryName"); 

     parameter.value = control.value; 

     document.forms.item(0).submit(); 

    } 

</script> 

<%Html.BeginForm();%> 

    <fieldset> 
     <legend>Fields</legend> 
     <p style="height: 0px"> 
     <input type="hidden" id="CountryName" name="CountryName" value="" /> 
     </p> 
     <p> 
      <label for="Country">Country:</label> 
      <%=Html.DropDownList("Country", (SelectList)ViewData["Countries"]), new { onchange="Postback()" })%> 
     </p> 
     <p> 
      <label for="State">State:</label> 
      <%=Html.DropDownList("State", (SelectList)ViewData["States"])%> 
      </p> 
     <p> 
      <label for="Brief Intro">Introduction:</label> 
      <%= Html.TextBox("Intro", ViewData["Introduction"]) %> 
     </p> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

<%Html.EndForm(); %> 

Controller:

public ActionResult Info() 
{ 
    ViewData["Countries"] = new SelectList(_db.Coutries.ToList(), "Id", "Name"); 
    return View(); 
} 

AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Info(int country) 
{ 
    ViewData["Countries"] = new SelectList(_db.Coutries.ToList(), "Id", "Name", country); 

    ViewData["States"] = new SelectList(_db.States.Where(s => s.countryid == country).ToList(), "Id", "Name"); 

    ViewData["Info"] = _db.CountryInfo.SingleOrDefault(info => info.countryid == country).Content; 

    return View(); 
} 

Edit: Appel ModelState.Clear() dans le second contrôleur résoudre ce problème. Merci à vous tous qui proposez des suggestions! Merci beaucoup!

+0

Semble que vous fournissez trop peu d'informations. –

+1

Publiez du code, cela nous aidera beaucoup. –

+0

Post le code de View et les actions GET et POST, s'il vous plait. –

Répondre

1

Utilisation fortement typée IEnumerable<SelectListItem> - Je crois que c'est mieux que SelectList. Essayez cette (Avez-vous vérifié le paramètre int country Débogueur?):

AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Info(int country) 
{ 
    ViewData["Countries"] = _db.Countries.Select(x => new SelectListItem { 
     Text = x.Name, 
     Value = x.Id, // or countryId ? 
     Selected = x.Id == country 
    }).ToList(); 

    ViewData["States"] = _db.States.Where(s => s.countryid == country) 
     .Select(x => new SelectListItem { 
      Text = x.Name, 
      Value = x.Id 
     }).ToList(); 

    // Info? or Intro? (there is only Intro in View) 
    ViewData["Info"] = _db.CountryInfo.SingleOrDefault(info => info.countryid == country).Content; 

    return View(); 
} 

Hope this helps

+0

Merci! Je vais essayer sur IEnumerable typé fort. En tant que pièce d'identité, je suis sûr d'utiliser le bon identifiant. Et je peux également imprimer l'identifiant et les informations sur la page. Juste ne peut pas mettre le défaut. Code: Liste SelectList = (SelectList) ViewData ["Etats"]; <% = list.SelectedValue%> L'ID imprimé est ce que je veux. – Roy

0

Êtes-vous le réglage de la selectedValue dans le SelectList (le deuxième au constructeur param dans l'extrait ci-dessous)?

var items = new SelectList(new List<string> {"one", "two", "three"}, "two"); 
+0

Bien sûr, comme vous pouvez le voir dans mon code. Merci. – Roy

Questions connexes