2015-05-25 3 views
2

Я хочу передать свое значение enum контроллеру.Как передать значение enum контроллеру с помощью 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

Попробуйте заменить слово 'FindSection' на' Section' в вашем методе действий, а затем запустите снова. –

+0

@HarveySpecter: Я не могу изменить свой параметр, потому что я использую этот метод во многих местах. –

+0

Вам нужно будет изменить имя в любом из этих двух мест. Либо в имени метода в контроллере, либо в вызове ajax. Они должны быть одинаковыми для признания. –

ответ

1

Изменить код действия на:

public ActionResult Generate(Section Section) { } 

Также не используйте жестко закодированные адреса в ASP.NET MVC, использовать URL-адрес хелперы вместо:

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

Edit: Если изменение параметра метода не является вариантом, чем использовать правильное название в методе 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

пожалуйста, dont hardcore this –

+0

@Lacy Jones Извините, я не понял. Можете ли вы быть более ясными? –

+0

Я имею в виду не могу это передать из ajax: Section.Upper.passing, как это из ajax, дает ошибку, что я описал в моем вопросе –

Смежные вопросы