我完全不了解ASP.Net,但我知道这是一个非常基本的问题。我有一个View,在其中有一个链接用于生成报告,但为了能够生成报告,我必须要求用户提供合适的文本名称。
到目前为止,我已经能够使用从我的控制器传递给视图的模型将数据从服务器传递到视图,但我不确定如何从视图传递数据到我的控制器。
在这种情况下,我只需要从视图传递一个字符串到控制器。
任何带有示例的建议都将不胜感激。
更新
我明白我必须将数据发送回服务器,但razorhtml代码和控制器应该如何实现?
我完全不了解ASP.Net,但我知道这是一个非常基本的问题。我有一个View,在其中有一个链接用于生成报告,但为了能够生成报告,我必须要求用户提供合适的文本名称。
到目前为止,我已经能够使用从我的控制器传递给视图的模型将数据从服务器传递到视图,但我不确定如何从视图传递数据到我的控制器。
在这种情况下,我只需要从视图传递一个字符串到控制器。
任何带有示例的建议都将不胜感激。
更新
我明白我必须将数据发送回服务器,但razorhtml代码和控制器应该如何实现?
您可以像从控制器传递数据到视图一样,使用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类(视图模型)来完成这个操作。
@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传递一个模型(根据其他答案)。<form action="myController/myAction" method="POST">
<input type="text" name="valueINeed" />
<input type="submit" value="View Report" />
</form>
控制器:
[HttpPost]
public ActionResult myAction(string valueINeed)
{
//....
}