2009-05-25 4 views
0

보기에서 다음 양식 사용MVC Ajax가 드롭 다운리스트 값을 게시하지 않습니다.

<% using (Ajax.BeginForm("PatientSearch", new {}, new AjaxOptions() 
      { 
       HttpMethod = "POST", 
       UpdateTargetId = "searchResults", 
       OnBegin = "BeginRequest", 
       OnSuccess = "SuccessRequest", 
       OnFailure = "FailRequest" 
      })) 
      { %> 
    <%=Html.DropDownList("patientType",(SelectList)ViewData["PatientTypeList"]) %> 
    <%=Html.DropDownList("edCenterID",(SelectList)ViewData["EdCenterList"]) %><br /> 
    <input type="submit"> 
<%} %> 

다음 HTML

<select id="patientType" name="patientType"> 
    <option selected="selected">Referral</option> 
    <option>Patient</option> 
</select> 
<select id="edCenterID" name="edCenterID"> 
    <option value="2">Barren River District Health Department</option> 
    <option value="3">Madison County Health Department</option> 
</select> 

의 결과 및 내 컨트롤러의 코드로 값을 캐 내려고

 public ActionResult PatientSearch(string patientType, int edCenterID)  { 
    //do something with values 

} 

patientType is is 항상 ""(으)로 전달됩니다. 그러나 edCenterID는 게시되고 수신됩니다.

이것을 Ajax.BeginForm에서 HTML.BeginForm으로 변경하면 모든 것이 완벽하게 작동합니다.

내 컨트롤러 DropDownList에 문제가 있습니까?

코멘트에서 추가

@Eoin은 내 선택이 가치없는 렌더링이고 그것이 아마도 문제라고 지적했습니다.
1. 표준 게시물에서는 작동하지만 Ajax 게시물에서는 작동하지 않는 이유는 무엇입니까?
2. 목록이있는 값을 포함하도록 드롭 다운 목록을 가져 오는 방법은 간단한 문자열 전용 목록 (키 없음)입니다. 내 SelectList 아래에 생성하는 데 사용되는 코드를 게시 오전

ViewData["PatientTypeList"]=new SelectList(new List<string>() 
     { "Referral", "Patient"}); 

답변

2

가 patientType 목록을합니까 아래 내 selectList의를 생성하는 데 사용되는 코드를 게시하고하는 것은 .Value 사물의 모습으로

, 그래서 기본적으로 PatientType DDL <option>의 렌더링되고 더 value을 프로그래머 없다 모든 옵션에는 value = ""가 있으므로 실제로 올바른 값을 포스트 백합니다.

처음에는 무엇이 렌더링되고 있는지에 문제가 있습니다.

편집

해결책이되는 것은 아니다

Dictionary<string, string> d = new Dictionary<string, string>(); 
d.Add("referral", "referral"); 
d.Add("patient", "patient"); 

ViewData["PatientTypeList"]=new SelectList(d, "Key", "Value"); 
+0

patientType 값이 표시된 값과 같아야합니다. 누락 된 값 태그라고 생각했지만, 표준 제출과 ajax 제출이 아닌 이유는 무엇입니까? –

+0

다음 코드로 SelectList를 만듭니다. ______ ViewData [ "PatientTypeList"] = new SelectList (new List () { "Referral", "Patient"})); ____ 이드가없는 목록에 더 좋은 방법이 있습니까? (필요한 경우 다른 질문으로 게시 해 드리겠습니다.) –

+0

비교를 위해 'EdCenterList'를 정의하는 방법 –

0

시도? Ajax 양식 제출에 문제가있는 것 같습니다. 여기

는 정상으로, 다음 실행 귀하의 방법을 쓰기 좋은 수정입니다 :

function addDropDownValues() { 
      $("select option").each(function(i) { 
       if ($(this).text() == "Red") { $(this).attr('value', "Red"); } 
       else if ($(this).text() == "Amber") { $(this).attr('value', "Amber"); } 
       else if ($(this).text() == "Green") { $(this).attr('value', "Green"); } 
       else if ($(this).text() == "Complete") { $(this).attr('value', "Complete"); } 
      }); 
     } 

경우 등 "빨간색", "호박"... 당신은

통과 할 값은

이 생산, 각 드롭 다운에 값을 추가합니다 :

<select name="status1" id="status1"><option value="Red">Red</option> 
<option value="Amber">Amber</option> 
<option selected="selected" value="Green">Green</option> 
<option value="Complete">Complete</option> 
</select> 

이 파이어 폭스와 인터넷 익스플로러 모두 작동합니다. Internet Explorer는 값 항목을 필요로하지만 파이어 폭스는 그렇지 않습니다.