我是ASP.Net的新手,我确信这是一个非常基本的问题我有一个View,其中有一个生成报告的链接但是能够生成报告我必须要求用户提供合适的文本名称好.
到目前为止,我已经能够使用从我的控制器传递的模型将数据从服务器传递到视图,但我不确定如何将数据从视图传递到我的控制器.
在这种情况下,我只需要将视图中的字符串传递给控制器.
任何有关示例的建议都将受到赞赏.
UPDATE
我知道我必须将数据发回服务器,但是如何以razorhtml代码和控制器的形式实现?
您可以使用ViewModel来完成,例如如何将数据从控制器传递到视图.
假设你有一个像这样的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类(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" /> }
<form action="myController/myAction" method="POST"> <input type="text" name="valueINeed" /> <input type="submit" value="View Report" /> </form>
控制器:
[HttpPost] public ActionResult myAction(string valueINeed) { //.... }
如果您不想/需要发布:
@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,但最好始终指定两者.