0

我有一个下拉列表,当它发生变化时。我希望所选值使用 ajax 进入控制器

      $(document).ready(function () {
        $("#otherCatches").change(function () {

            $.ajax({
                url: "Clients/DDL",
                type: "POST",
                data: {
                    name: $('#othercatches').val()
                },
                success: function (result) {
                    alert(result)
                }
            });
            return false;
        });
    });

         <select id ="otherCatches">
          @foreach (var item in Model.Sample)
         {
           <option>
                @item.SampleName
           </option> 
         }
        </select>

它没有击中控制器

[HttpPost]
public virtual ActionResult DDL(int name)
{

     //do method here

}
4

1 回答 1

1

在您的视图代码中,您没有value设置option. 所以$('#othercatches').val()会给你undefined

使用DropDownList/ DropDownListForHTML Helper 方法呈现 SELECT 元素。

使用强类型视图。例如:如果您的视图用于创建 DDL,您将定义一个像这样的视图模型

public class ClientDDL
{
  public string Name { set;get;}  
  public int SelectedCatch { set;get;}
  public IEnumerable<SelectListItem> OtherCatches { set;get;}
  //Other relevant proeprties also here 

  public ClientDDL()
  {
     //Lets initialize the OtherCatches Proeprty
      OtherCatches=new List<SelectListItem>();
  }
}

现在在我们的GET操作中,我们将创建这个 ViewModel 的对象并将其发送到视图。

public ActionResult CreateDDL()
{
    ClientDDL ddl new ClientDDL();

   // The below line is hard coded for demo. you may replace 
   //  this with loading data from your Data access layer.
    ddl.OtherCatches= new[]
    {
          new SelectListItem { Value = "1", Text = "Book" },
          new SelectListItem { Value = "2", Text = "Pen" },
          new SelectListItem { Value = "3", Text = "Computer" }
    };        
    return View(ddl);
}

现在我们的视图(CreateDDL.cshtml),它是我们ClientDDL类的强类型,看起来像这样

@model ClientDDL    
@using(Html.Beginform())
{
  @Html.DropDownListFor(x => x.SelectedCatch,
                   new SelectList(Model.OtherCatches,"Value","Text"), "Select..")

}
<script type="text/javascript">    
   $(function(){
      $("#SelectedCatch").change(function(){
          $.ajax({
            url: "@Url.Action("DDL","Clients")",
            type: "POST",
            data: {  name: $(this).val() },
            success: function (result) {
                alert(result)
             }
          });
      });
   });
</script>

永远不要硬编码这样的操作方法的路径。尽可能使用 URL Helper 方法。

不知道为什么你有一个virtual方法?它应该像这样简单

[HttpPost]
public ActionResult DDL(int name)
{

     //do method here

}
于 2012-09-05T16:42:10.630 回答