ASP.Net MVC Как передавать данные из представления в контроллер - программирование
Подтвердить что ты не робот

ASP.Net MVC Как передавать данные из представления в контроллер

Я совершенно новичок в ASP.Net, и я уверен, что это очень простой вопрос У меня есть представление, в котором есть ссылка для создания отчета, но чтобы иметь возможность генерировать отчет, я должен попросить пользователя также указать подходящее текстовое имя.

До сих пор я мог передавать данные с сервера для просмотра с помощью моделей, переданных с моего контроллера, для просмотра, но я не уверен, как передавать данные из представления на мой контроллер.

Мне просто нужно передать строку из представления в контроллер в этом случае.

Любой совет с примером будет оценен.

UPDATE

Я понимаю, что мне нужно отправить данные обратно на сервер, но как это реализовать в виде кода и контроллера razorhtml?

4b9b3361

Ответ 1

Вы можете сделать это с помощью ViewModels, например, как вы передали данные с вашего контроллера для просмотра.

Предположим, что у вас есть viewmodel, подобный этому

public class ReportViewModel
{
   public string Name { set;get;}
}

и в вашем действии GET,

public ActionResult Report()
{
  return View(new ReportViewModel());
}

и ваше представление должно быть строго напечатано на ReportViewModel

@model ReportViewModel
@using(Html.BeginForm())
{
  Report NAme : @Html.TextBoxFor(s=>s.Name)
  <input type="submit" value="Generate report" />
}

и в вашем методе HttpPost в вашем контроллере

[HttpPost]
public ActionResult Report(ReportViewModel model)
{
  //check for model.Name property value now
  //to do : Return something
}

ИЛИ Просто вы можете сделать это без классов POCO (Viewmodels)

@using(Html.BeginForm())
{
   <input type="text" name="reportName" />
   <input type="submit" />
}

и в вашем действии HttpPost используйте параметр с тем же именем, что и имя текстового поля.

[HttpPost]
public ActionResult Report(string reportName)
{
  //check for reportName parameter value now
  //to do : Return something
}

РЕДАКТИРОВАТЬ: В соответствии с комментарием

Если вы хотите отправить сообщение на другой контроллер, вы можете использовать эту перегрузку метода BeginForm.

@using(Html.BeginForm("Report","SomeOtherControllerName"))
{
   <input type="text" name="reportName" />
   <input type="submit" />
}

Передача данных из метода действий для просмотра?

Вы можете использовать ту же модель просмотра, просто установите значения свойств в свой метод действий GET

public ActionResult Report()
{
  var vm = new ReportViewModel();
  vm.Name="SuperManReport";
  return View(vm);
}

и на ваш взгляд

@model ReportViewModel
<h2>@Model.Name</h2>
<p>Can have input field with value set in action method</p>
@using(Html.BeginForm())
{
  @Html.TextBoxFor(s=>s.Name)
  <input type="submit" />
}

Ответ 2

Если вы не хотите/не публиковать сообщения:

@Html.ActionLink("link caption", "actionName", new { Model.Page })  // view controller
@Html.ActionLink("link caption", "actionName", "controllerName", new { reportID = 1 }, null);

[HttpGet]
public ActionResult actionName(int reportID)
{

Обратите внимание, что идентификатор reportID в новой {} части соответствует идентификатору reportID в параметрах действия, вы можете добавить любое количество параметров таким образом, но не более 2 или 3 (некоторые будут спорить всегда), вы должны проходить модель через POST (в соответствии с другим ответом)

Изменить. Добавлен нуль для правильной перегрузки, как указано в комментариях. Там много перегрузок, и если вы укажете как action + controller, тогда вам потребуются как routeValues, так и htmlAttributes. Без контроллера (просто подпись + действие) нужны только параметры routeValues, но лучше всего всегда указывать оба.

Ответ 3

<form action="myController/myAction" method="POST">
 <input type="text" name="valueINeed">
 <input type="submit" value="View Report">
</form>


[HttpPost]
public ActionResult myAction(string valueINeed)
{
  ....
}