ASP.Net MVC如何将数据从视图传递到控制器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我对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课程的情况下(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传递模型根据其他答案)

正如注释中指出的那样,为正确的重载添加了空值。有很多重载,如果你指定了action + controller,那么你需要routeValues和htmlAttributes。如果没有控制器(只是标题+动作),只需要routeValues,但最好总是指定两者。

扫码关注云+社区