让我们暂时忽略“AJAX-y”方面(因为这是一个不同的问题),只是看看在视图和控制器之间传递数据。我首先建议您查看NerdDinner Tutorial,它提供了关于MVC如何工作以及如何使用MVC某些功能的一些很好的见解。
若要解决您的数据如何从视图传递到控制器和回来的具体问题,有几种方法可以做到这一点。然而,对大多数人来说趋于合理的是使用强类型观点的想法。
假设您有一个名为Person的模型。现在,不要担心我们如何存储Person数据 - 我们在MVC项目的Models文件夹中只有一个Person类。
public class Person {
public string FirstName;
public string LastName;
public Person() {
FirstName = "John";
LastName = "Doe";
}
}
当我们想在一个视图来显示Person数据,我们对一个特定的控制器的请求。在这种情况下(为了清楚起见),我们将这个控制器称为MainController。这将进入控制器文件夹并将被称为MainController。我们调用Action(一个动作实际上只是一种专门的方法),我们想从Index中获取数据。由于ASP.NET MVC路由的工作原理,我们服务器的路径是:http://localhost/Main/Index。注意控制器(减去“控制器”名称),Action组成路径。 (第一部分是您的服务器名称,当然)
让我们看看你的控制器 - 我要保持它很简单,现在:
public class MainController : Controller {
public ActionResult Index() {
Person person = new Person();
return View(person);
}
}
什么,我们应该继续对指数内动作是它返回一个View(默认情况下,它与Action有相同的名称)和一个与该视图相对应的模型。现在,我们必须创造我们的观点。
这里的重要部分是,您要强制键入控制器中返回的模型到您的视图。你用这行(这是你的aspx文件中的第一行)做到这一点。
<%@ 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" />
<% } %>
这是关于控制器和视图之间获取数据来回的重要组成部分。我们在这里做的是,我们正在采用强类型视图(用Person类输入)并使用帮助器方法(如LabelFor和TextBoxFor)将模型与其数据绑定在一起,并最终与操作一起包含在控制器中(我们必须在一瞬间完成开发)。
因此,您现在可以看到数据。但是,如果用户更改名称并点击提交 - 我们希望页面显示新名称。这意味着我们需要向MainController添加一个动作 - 接收数据的动作。
[HttpPost]
public ActionResult Index(Person person) {
// Do whatever you want with the Person model. Update a database, or whatever.
return View(person);
}
此操作看起来与我们刚刚开发的其他操作非常相似。然而,这个人需要一个人物(来自被提交的表单),并且它给了控制者一个机会去做任何需要做的事情。完成此操作后,您可以选择重定向到其他页面,重新显示页面(如果出现错误,则很有用),或执行任何其他操作。
再次,这是NerdDinner Tutorial所有覆盖(和更多)。我强烈建议你阅读并遵循。
至于你所讨论的AJAX-y方面,前提仍然是一样的(虽然有一点JavaScript/jQuery工作在那里进行)。我现在不会进入它,但基本知识也包含在NerdDinner tutorial中。
我希望这能让你开始。我记得我刚开始使用网络技术时也有点困惑,所以我希望这可以帮助你!