Ajax 在MVC2中在视图和控制器之间传递值

Ajax 在MVC2中在视图和控制器之间传递值,ajax,asp.net-mvc-2,parameters,html.beginform,Ajax,Asp.net Mvc 2,Parameters,Html.beginform,我一直对如何在MVC中的视图和控制器之间传递值感到困惑。我知道我可以在控制器中设置ViewData,并在视图中使用它,但反过来呢 我发现我可以使用一个隐藏字段,然后通过请求访问它。表单[“name”]如下所示: <% using (Html.BeginForm("Upload", "Customers", FormMethod.Post, new { enctype = "multipart/form-data" })) {%> <br /> <input i

我一直对如何在MVC中的视图和控制器之间传递值感到困惑。我知道我可以在控制器中设置ViewData,并在视图中使用它,但反过来呢

我发现我可以使用一个隐藏字段,然后通过请求访问它。表单[“name”]如下所示:

<% using (Html.BeginForm("Upload", "Customers", FormMethod.Post, new { enctype = "multipart/form-data" }))
   {%>
<br />
<input id="currentDir" type="hidden" name="currentDir" value="" />
<input type="file" name="fileTextbox" id="fileTextbox" />
<br />
<br />
<input type="submit" value="Send" />
<% } %>




更复杂的是,该值最初来自jquery脚本,因此输入字段是我唯一能想到的方法。但感觉还是不对。。。也许不是,但我想知道是否有其他更“合适”的方法在视图和控制器之间传递值(两种方法)。应该使用querystring吗?如果是这样的话,它们在html.beginform htmlhelper中会是什么样子

此外,我在这里试图做的是为我的应用程序启用上传可能性。我正试图使整个应用程序尽可能“Ajaxy”。但这张表格将是一个完整的帖子。有没有其他方法可以做到这一点,而不必重新加载整个页面以进行此上载?

让我们暂时忽略“AJAX-y”方面(因为这是一个不同的问题),只看在视图和控制器之间传递数据。我首先建议您查看,它提供了一些关于MVC如何工作以及如何使用MVC的一些功能的很好的见解

为了解决数据如何从视图传递到控制器和从控制器传递回来的具体问题,有几种方法可以做到这一点。然而,对于大多数人来说,使用强类型视图的想法是有意义的

假设你有一个叫Person的模型。现在,不要担心我们如何存储Person数据——我们只是在MVC项目的Models文件夹中有一个Person类

public class Person {

  public string FirstName;
  public string LastName;

  public Person() {
    FirstName = "John";
    LastName = "Doe";
  }
}
当我们想在视图中显示有关人员的数据时,我们会向特定的控制器发出请求。在这种情况下(为了清楚起见),我们将此控制器称为主控制器。这将进入控制器文件夹,称为MainController。让我们调用要从索引中获取数据的操作(操作实际上只是一个专门的方法)。根据ASP.NET MVC路由的工作方式,到服务器的路径为:。请注意控制器(减去“控制器”名称),操作构成了路径。(当然,第一部分是您的服务器名称。)

让我们看一下您的控制器-我现在要让它非常简单:

public class MainController : Controller {

  public ActionResult Index() {
    Person person = new Person();
    return View(person);
  }
}
我们在索引操作中所做的是,它返回一个视图(默认情况下,该视图与该操作具有相同的名称)和一个与该视图对应的模型。现在,我们必须创建我们的视图

这里重要的一点是,您希望在控制器中强烈键入要返回到视图的模型。您可以使用这一行(这是aspx文件中的第一行)

这个动作看起来与我们刚刚开发的另一个动作非常相似。然而,这一个获取了一个person对象(来自正在提交的表单),它为控制器提供了一个机会,可以对该对象执行任何需要执行的操作。完成此操作后,您可以选择重定向到其他页面、重新显示页面(如果有错误,将非常有用)或执行任何其他操作

同样,本手册中已涵盖了所有(以及更多)内容。我强烈建议你仔细阅读并坚持到底

至于您讨论的AJAX-y方面,前提仍然是一样的(尽管其中有一些JavaScript/jQuery工作正在进行)。我现在不想讨论它,但基础知识也将在本文中介绍

我希望这能让你开始。我记得当我第一次开始使用网络技术时,我也有点困惑,所以我希望这能帮助你

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewUserControl<Project.Namespace.Person>" %>
<% using (Html.BeginForm()) { %>
  <%: Html.LabelFor(model => model.FirstName) %>
  <%: Html.TextBoxFor(model => model.FirstName) %>
  <%: Html.LabelFor(model => model.LastName) %>
  <%: Html.TextBoxFor(model => model.LastName) %>

  <input type="submit" value="Submit" name="submitButton" />
<% } %>
[HttpPost]
public ActionResult Index(Person person) {
  // Do whatever you want with the Person model. Update a database, or whatever.
  return View(person);
}