MVC Ajax没有发布下拉列表值

时间:2009-05-25 16:01:51

标签: asp.net asp.net-mvc

在视图中使用以下表单

<% 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始终作为“”传递;但是,edCenterID发布并收到了。

如果我将它从Ajax.BeginForm更改为HTML.BeginForm,一切都很完美。

DropDownList中的问题,我的控制器,都是?

从评论中添加

@Eoin向我指出我的选择是没有值的渲染,这可能是问题所在。这提出了两个问题:
1.为什么它适用于标准帖子,而不是Ajax帖子 2.如何让我的下拉列表包含一个值,列表是一个简单的字符串列表(没有键)。我发布了用于生成

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

2 个答案:

答案 0 :(得分:2)

patientType列表是否具有.Value

根据事物的外观,没有为PatientType DDL value呈现<option>,所以基本上每个选项都有一个值=“”,所以它实际上回发了正确的值。 / p>

问题在于首先渲染的是什么。

修改

尝试

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

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

答案 1 :(得分: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>

这适用于Firefox和Internet Explorer。 Internet Explorer需要值项,firefox不需要。