我对ASP.Net完全陌生,我相信这是一个非常基本的问题
我有一个视图,其中有一个链接来生成报告,但是能够生成报告,我必须要求用户提供一个合适的文本名称。
我有一个视图,其中有一个链接来生成报告,但是能够生成报告,我必须要求用户提供一个合适的文本名称。
到目前为止,我已经能够传递数据从服务器到使用从我的控制器传递的视图查看,但我不知道如何传递数据从视图到我的控制器。
在这种情况下,我只需要传递一个字符串从视图到控制器。
任何建议与示例将不胜感激。
更新
我理解我必须发布数据回到服务器,但是如何实现以razorHTML代码和控制器的形式?
谢谢,
解决方法
你可以用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类(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 }
编辑:根据评论
如果你想发布到另一个控制器,你可以使用this overload的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" /> }