2015-05-25 111 views
2

我想将我的枚举值传递给控制器​​。如何通过ajax将枚举值传递给控制器​​?

我有这个枚举在我的模型:

public enum Section 
{ 
     Upper, 
     Lower 
}; 

我想通过Ajax我控制器上通过这个值:

$(function() { 
    var section='@Section.Upper'//i want to pass Upper value only to my controller. 
    alert(section) ///output Upper 
$.ajax({ 
       url: '/Section/FindSection', 
       data: { 'Section': section}, 
}); 

在它被存储1上,0为数据库中的表降低。

我的控制器:

public ActionResult Generate(int FindSection) 
{ 
} 

Error:The parameters dictionary contains a null entry for parameter 'FindSection' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Generate(Int32)'

我知道我可以直接传递传递1,但我不想硬编码,因为在未来,如果我需要通过任何其他事情则 再次我必须改变码。

我怎么能做到这一点???

+1

尝试在操作方法中用'Section'替换单词FindSection,然后再次运行。 –

+0

@HarveySpecter:我不能改变我的参数,因为我在这么多地方使用了这个方法 –

+0

你必须在这两个地方中的任何一个地方改变名字。无论是在控制器的方法名称还是在ajax调用中。他们需要相同才能得到认可。 –

回答

1

变化的行动代码:

public ActionResult Generate(Section Section) { } 

也不要使用在ASP.NET MVC硬编码的网址,利用URL助手代替:

$.ajax({ 
    url: '@Url.Action("Generate", "Section")', 
    data: { 'Section': section } 
}); 

编辑:如果改变方法参数不是一个选项,而是使用ajax方法中的正确名称:

$.ajax({ 
    url: '@Url.Action("Generate", "Section")', 
    data: { 'FindSection': section } 
}); 
+0

对不起,我不能改变我的方法参数,因为它是用来在多个地方,要改变它需要在很多地方 –

4

你只需要通过你想要的物品的索引。

public ActionResult Generate(Section section) 
{ 

} 

$(function() { 
    //... 
$.ajax({ 
      url: '/Section/Generate', 
      data: { section: 1} //the controller will receive Super.Lower 
}); 
//.. 
}) 
+0

改变请不要铁杆这个 –

+0

@Lacy琼斯对不起,我没听懂。你能更清楚吗? –

+0

我的意思是我不能从ajax这样传递:Section.Upper.passing像这样从ajax提供错误我在我的问题中描述了什么 –

相关问题