Я совершенно не знаком с ASP.Net, и я уверен, что это очень простой вопрос. У меня есть представление, в котором есть ссылка для создания отчета, но для создания отчета я должен попросить пользователя предоставить подходящее текстовое имя как хорошо.
До сих пор я мог передавать данные с сервера для просмотра с использованием моделей, переданных с моего контроллера для просмотра, но я не уверен, как передавать данные из представления в мой контроллер.
В этом случае мне просто нужно передать строку из представления в контроллер.
Любые советы с примером будут оценены.
ОБНОВИТЬ
Я понимаю, что должен отправить данные обратно на сервер, но как это реализовать в виде кода и контроллера razorhtml?
asp.net
asp.net-mvc
Ахмед
источник
источник
Ответы:
Вы можете сделать это с помощью ViewModels, например, как вы передали данные из вашего контроллера для просмотра.
Предположим, у вас есть такая модель просмотра
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" /> }
источник
Если вы не хотите / не должны публиковать:
@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 (некоторые всегда будут спорить), вы должны передавать модель через POST ( согласно другому ответу)
Изменить : добавлен нуль для правильной перегрузки, как указано в комментариях. Существует ряд перегрузок, и если вы укажете и действие + контроллер, вам понадобятся как 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) { //.... }
источник