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) { .... }