首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.Net MVC如何将数据从视图传递到控制器

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

Stack Overflow用户
提问于 2013-12-03 00:28:39
回答 3查看 422.7K关注 0票数 85

我是一个全新的ASP.Net,我相信这是一个非常基本的问题,我有一个视图,其中有一个链接来生成报告,但为了能够生成报告,我必须要求用户提供一个合适的文本名称以及。

到目前为止,我已经能够使用从控制器传递到视图的模型将数据从服务器传递到视图,但我不确定如何将数据从视图传递到控制器。

在这种情况下,我只需要将一个字符串从视图传递给控制器。

任何建议与例子将不胜感激。

更新

我知道我必须将数据发送回服务器,但是如何以razorhtml代码和控制器的形式实现这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-03 00:37:21

您可以使用ViewModels完成此操作,就像您如何将数据从控制器传递到视图一样。

假设您有一个这样的视图模型

代码语言:javascript
复制
public class ReportViewModel
{
   public string Name { set;get;}
}

在你的GET Action中,

代码语言:javascript
复制
public ActionResult Report()
{
  return View(new ReportViewModel());
}

并且您的视图必须强类型化为ReportViewModel

代码语言:javascript
复制
@model ReportViewModel
@using(Html.BeginForm())
{
  Report NAme : @Html.TextBoxFor(s=>s.Name)
  <input type="submit" value="Generate report" />
}

在控制器中的HttpPost操作方法中

代码语言:javascript
复制
[HttpPost]
public ActionResult Report(ReportViewModel model)
{
  //check for model.Name property value now
  //to do : Return something
}

简单地说,您可以在没有POCO类(Viewmodels)的情况下做到这一点。

代码语言:javascript
复制
@using(Html.BeginForm())
{
   <input type="text" name="reportName" />
   <input type="submit" />
}

在HttpPost操作中,使用与textbox名称同名的参数。

代码语言:javascript
复制
[HttpPost]
public ActionResult Report(string reportName)
{
  //check for reportName parameter value now
  //to do : Return something
}

编辑:根据评论编辑

如果你想post到另一个控制器,你可以使用BeginForm方法的this overload

代码语言:javascript
复制
@using(Html.BeginForm("Report","SomeOtherControllerName"))
{
   <input type="text" name="reportName" />
   <input type="submit" />
}

将数据从操作方法传递到视图?

您可以使用相同的视图模型,只需在GET操作方法中设置属性值

代码语言:javascript
复制
public ActionResult Report()
{
  var vm = new ReportViewModel();
  vm.Name="SuperManReport";
  return View(vm);
}

在你看来

代码语言:javascript
复制
@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" />
}
票数 140
EN

Stack Overflow用户

发布于 2013-12-03 00:37:25

如果你不想/不需要发帖:

代码语言:javascript
复制
@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。如果没有控制器(只需要caption+action),则只需要routeValues,但最好总是同时指定两者。

票数 30
EN

Stack Overflow用户

发布于 2013-12-03 00:31:21

代码语言:javascript
复制
<form action="myController/myAction" method="POST">
 <input type="text" name="valueINeed" />
 <input type="submit" value="View Report" />
</form> 

控制器:

代码语言:javascript
复制
[HttpPost]
public ActionResult myAction(string valueINeed)
{
   //....
}
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20333021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档