Мое приложение ищет файлы, содержащие строку, которую ищет пользователь. Пока он делает это отлично. Последнее, что мне нужно сделать, это экспортировать его в файл Excel, поэтому я добавил метод внутри моего контроллера, который вызывается страницей Result
после нажатия кнопки.
Результаты сохраняются в List
типа Result
, который является классом с четырьмя переменными.
Метод ExportToExcel
в настоящее время возвращает строку, чтобы я мог проверить, является ли список результатов пустым. Каждый раз, когда он выходит как «Нет данных», поэтому он является нулевым. Он прекрасно печатает таблицу с информацией на странице Results
, но не имеет информации, когда я хочу ее экспортировать.
Почему моя модель не переходит из вида в метод?
Сначала я хотел передать свою модель, чтобы я мог получить доступ к информации в List
, но теперь мне интересно, будет ли лучше сохранить данные List
в контроллере, чтобы я мог напрямую передать их к моему методу.
В любом случае все будет хорошо, и я открыт для любых других способов сделать это.
Модель
namespace Final.Models
{
public class InputModel:Result
{
public List<Result> Results { get; set; }
}
}
Контроллер
Этот контроллер просто показывает, как я передаю InputModel между представлениями и методом. Может я тут что-то не так делаю?
public ActionResult Index()
{
var input = new InputModel();
return View(input);
}
[HttpPost]
public ActionResult Index(InputModel input)
{
//Finds files that contain string.
//send model to Result
return View("Result", input);
}
public ActionResult Result(InputModel input)
{
return View(input);
}
[HttpPost]
public string Result(InputModel input,string export)
{
return ExportToExcel(input);
}
public string ExportToExcel(InputModel input)
{
if (input.Results!=null)
{
//Run excel code here
return "Excel Exported";
}
else
{
return "No Data";
}
}
Просмотр результата
Это часть представления, а не все. Я не думал, что полный просмотр был необходим, но я разместил его внизу на всякий случай.
@foreach(var result in Model.Results)
{
<tr>
//Return graph of information received
</tr>
}
</table>
<form action="Find/Result" method="POST">
<input type="submit" value="Export" name="export" class="btn btn-default">
</form>
выход
Происходит после нажатия кнопки «Экспорт»
"No Data"
Это мои первые приложения MVC, поэтому еще раз, пожалуйста, дайте мне знать, если есть какая-либо другая область, в которой я могу улучшить.
Полный просмотр для результата
Изменена форма для включения всего представления в соответствии с предложением Wubbly, но я получаю тот же вывод.
@model Final.Models.InputModel
@{
ViewBag.Title = "Result";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<br />
<h4>Result</h4>
<hr />
@using (Html.BeginForm("Result", "Find", FormMethod.Post))
{
<p>The <b>@Model.SelectedText</b> files that contain <b>"@Model.Find"</b> are: </p>
<div>
<table class="table table-bordered table-responsive table-hover">
<tr>
//HEADERS
</tr>
@foreach (var result in Model.Results)
{
// int i = 1;
<tr>
<td>@result.SelectedText</td>
<td>@result.FileName</td>
<td>@result.Line</td>
<td>@result.LineCode</td>
</tr>
}
</table>
<div class="form-group">
<div class="col-md-offset-2 ">
<input type="submit" value="Export" name="export" class="btn btn-default">
</div>
</div>
</div>
}
<p>
@Html.ActionLink("Back to List", "Index")
</p>