2009-07-27 4 views
-2

저는 Microsoft ASP MVC 프레임 워크를 연구 중입니다. 여기 내 페이지가 이상해.ASP.net에서 컨트롤이 새로 고쳐지지 않습니다. MVC

페이지에 두 개의 드롭 다운 목록이 있습니다. 첫 번째 폼은 컨트롤러에 매개 변수를 전달하여 폼을 다시 게시합니다. 컨트롤러는 두 번째 드롭 다운 목록과 두 개의 텍스트 상자와 같은 다른 컨트롤을 업데이트합니다. 뷰 데이터에 데이터를 전달합니다. 그리고 컨트롤에 할당합니다 (SelectList to DropDownList 및 string to TextBox). 그러나 그 통제는 게시물 이전과 동일하게 유지됩니다. 어떻게 해결할 수 있습니까? 미리 감사드립니다!

감사

편집 :

감사합니다! 여기 내 코드입니다 :

보기 :

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

편집 : 두 번째 컨트롤러에 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 부분으로는 올바른 ID를 사용해야합니다. 그리고 이드와 정보를 페이지에 인쇄 할 수도 있습니다. 단지 비방을 설정할 수 없습니다. 코드 : SelectList list = (SelectList) ViewData [ "States"]; <% = list.SelectedValue %> 인쇄 된 ID는 내가 원하는 것입니다. – Roy

0

당신이 selectList의 (아래 조각의 생성자에 두 번째 PARAM)에서 selectedValue를 설정하는 데 도움이?

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

물론, 내 코드에서 알 수 있듯이. 감사. – Roy

관련 문제