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


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

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

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

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

обновление

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

3 58

3 ответа:

вы можете сделать это с помощью 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 (Просмотр моделей)

@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
}

EDIT:в соответствии с комментария

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

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

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

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

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" />
}

в случае, если вы не хотите/нужно постить:

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

[HttpGet]
public ActionResult actionName(int reportID)
{

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

Edit: добавлено значение null для правильной перегрузки, как указано в комментариях. Существует ряд перегрузок, и если вы укажете оба действия + контроллер, то вам нужны как routeValues, так и htmlAttributes. Без контроллера (только заголовок+действие) необходимы только routeValues, но может быть лучшей практикой всегда указывать оба.

<form action="myController/myAction" method="POST">
 <input type="text" name="valueINeed" />
 <input type="submit" value="View Report" />
</form> 
:
[HttpPost]
public ActionResult myAction(string valueINeed)
{
   //....
}