ASP.Net MVC как передать данные из представления в контроллер [закрыто]
Я совершенно новичок ASP.Net и я уверен, что это очень простой вопрос У меня есть представление, в котором есть ссылка для создания отчета, но чтобы иметь возможность создавать отчет, я должен попросить пользователя предоставить подходящее текстовое имя.
до сих пор мне удавалось передавать данные с сервера для просмотра с помощью моделей, передаваемых с моего контроллера для просмотра, но я не уверен, как передать данные из представления на мой контроллер.
Мне просто нужно передать строку из вида в контроллер этот случай.
любые советы с примером будут оценены.
обновление
Я понимаю, что мне нужно отправить данные обратно на сервер, но как это реализовать в виде кода razorhtml и контроллера?
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, но может быть лучшей практикой всегда указывать оба.