ASP.Net MVC如何将数据从视图传递到控制器
我是完全新的ASP.Net,我相信这是一个非常基本的问题,我有一个视图,其中有一个链接来生成报告,但能够生成报告,我必须要求用户提供一个合适的文本名称好。
到目前为止,我已经能够从服务器传递数据使用从我的控制器传递的模型来查看,但我不知道如何将数据从视图传递到我的控制器。
在这种情况下,我只需要从视图传递一个string到控制器。
任何意见的例子将不胜感激。
UPDATE
我知道我必须将数据发回服务器,但是如何以razorhtml代码和控制器的forms实现呢?
你可以像ViewModels一样,通过你的控制器传递数据来查看。
假设你有这样的视图模型
public class ReportViewModel { public string Name { set;get;} }
并在您的GET操作中,
public ActionResult Report() { return View(new ReportViewModel()); }
并且您的视图必须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传递模型根据其他答案)
编辑 :正确的重载,如注释中指出,添加null。 有很多重载,如果你指定了action + controller,那么你同时需要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) { .... }