2015-07-31 2 views
2

У меня есть следующие кнопки в представленииMVC: Отправить параметры метода с помощью кнопки

<button id="Export" class="btn btn-default custom" type="button"> 
      <i class="glyphicon glyphicon-file"></i>Export to Excel 
    </button> 

И я хочу, чтобы экспортировать список материалов, которые я имею в ViewData

у меня уже есть логика. Код может быть в или обычный метод ActionResult и это было бы что-то вроде этого:

[HttpPost] 
    public void Export(List<int> listPassed) 
    { 
      //stuff here 
    } 

Я попытался добавить href="@Url.Action("Export", "Materials", new { export_documentation = true })", но это не сработало.

Я мог бы сделать это с переопределением метода ActionLink, но я бы потерял глификон. Вещь, которую я хочу избежать. Переопределение ActionLink, которое обманывает помощника, чтобы иметь глификон, также не получилось.

Я пробовал Ajax, но я сосать jscript и ajax и все это на данный момент.

Редактировать

@using (Html.BeginForm("Export", "Materials", 
     FormMethod.Post, new { listPassed = Request["SelectList"] })) 
     { 
     <button id="Export" class="btn btn-default custom" type="submit"> 
       <i class="glyphicon glyphicon-file"></i>Export to Excel 
     </button> 
     } 

Это не будет работать.

Итак, как можно отправить параметры в метод?

+0

Submit значения с формой. Кодируйте значения формы с помощью параметров ViewData. – Jasen

+0

Как запросить i.e эту переменную 'ViewData [" SelectList "] = HttpContext.Session [" SelectList "] ?? новый список (); 'from View? – Aoren

ответ

2

Если ваш список находится в ViewData, то объект, который передается в качестве третьего параметра, может быть вашим списком с точным именем, которое указывает подпись вашего контроллера.

@Url.Action("Export", "Materials", new { listPassed= ViewData.myList }) 

Конечно, это потребует от вас использовать якорь <a href="@Url...">...</a> вместо кнопки, но это не должно быть большое дело.

Here's a link to relevant docs on MSDN

+0

Привет @JDupont. У меня проблема. 'ViewData' не имеет' .myList'. Я подумал о чем-то вроде «ViewData.Select (s => s.Value) .ToArray()», но затем я отправляю пустой список. – Aoren

0

Если добавить список в ViewBag

[HttpGet] 
public ActionResult MyView() 
{ 
    ViewBag.SelectList = new List<int> { 1, 2, 3 }; 
    return View(); 
} 

Тогда с точки зрения вы представить его с формой. Вам понадобится для, а не foreach, потому что для определения элементов списка необходим индекс i.

@{ 
    var list = ViewBag.SelectList as List<int>; 
} 

@using(Html.BeginForm("Export", "Materials", FormMethod.Post)) 
{ 
    for (var i = 0; i < list.Count; i++) 
    { 
     @Html.HiddenFor(m => list[i], new { Name="listPassed[" + i + "]" }) 
    } 
    <button type="submit">Export to Excel</button> 
} 

представит ваши действия

[HttpPost] 
public ActionResult Export(List<int> listPassed) 
{ 
    return RedirectToAction("Success"); 
} 
+0

Я ухожу из офиса прямо сейчас, но это выглядит очень хорошо. Могу ли я передать вам свои отзывы позже? Как только я доберусь домой, я попробую. – Aoren

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