2009-07-27 3 views
-2

Я изучаю структуру Microsoft ASP MVC. Вот что-то странное в моей странице.Элементы управления не обновлены в ASP.net MVC

У меня есть два выпадающих списка на странице. Первый отправляет форму обратно, передавая параметры контроллеру. Контроллер обновляет второй выпадающий список и другие элементы управления, например два текстовых поля. Я передаю данные в viewdata. И назначил их элементам управления (SelectList to DropDownList и строка в TextBox). Но эти полномочия остаются такими же, как и до поста. Как я могу это исправить? Заранее спасибо!

С уважением

Edit:

Спасибо! Вот мой код:

Вид:

<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(); %> 

Контроллер:

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: Вызов ModelState.Clear() во втором контроллере исправить эту проблему. Спасибо всем, кто предлагает предложения! Большое спасибо!

+0

Кажется, что вы предоставляете слишком мало информации. –

+1

Опубликовать код, который нам очень поможет –

+0

Отправьте код с поля «Вид» и «GET» и «POST», пожалуйста. –

ответ

1

Использовать строго типизированный IEnumerable<SelectListItem> - Я верю, что это лучше, чем SelectList. Попробуйте это (вы проверили параметр int country в отладчике?):

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(); 
} 

Надеется, что это помогает

+0

Спасибо! Я попробую сильную типизированную IEnumerable. Как часть id, я обязательно использую правильный идентификатор. И я также могу распечатать идентификатор и информацию на странице. Просто не может установить дефолт. Код: SelectList list = (SelectList) ViewData ["States"]; <% = list.SelectedValue%> распечатанный идентификатор - это то, что я хочу. – Roy

0

ли параметру в SelectedValue в SelectList (вторых парах конструктору в ниже фрагменте коды)?

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

Несомненно, как вы можете видеть из моего кода. Благодарю. – Roy

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