2010-02-10 424 views
4

在mvc中,页面不会像asp.net那样回发,那么我们如何在asp.net mvc2中执行回发操作。为什么当有人选择一个chech box时如何执行特定的动作? 预先感谢如何在ASP.NET MVC中执行PostBack操作?

+0

我建议你阅读并理解MVC模式(http://en.wikipedia.org/wiki/Model%E2%80 %93view%E2%80%93controller)以及它如何应用于ASP.NET MVC实现(http://www.asp.net/mvc/)。 – Lazarus 2010-02-10 12:07:23

+1

为什么哦,为什么这是被低估?对于一个新加入MVC的人来说,他们花时间在Webforms上,这是一个相当有效的问题。如果SO是有问题答案的地方,那就是奖金! =) – Rob 2010-02-10 12:25:09

回答

5

WebForms中回发模型背后的机制称为HTTP POST。这是用户输入如何传回服务器的方式。

您可以手动完成。手动将JavaScript处理程序附加到复选框“onclick”事件,并对某个url执行POST请求。在那里,这个请求会在你做你想做的事情时触发一些控制器行为。例如,更新模型(选中/取消选中该复选框)并返回POST源自的相同视图。该视图现在将显示该复选框的不同状态。

WebForms机制几乎完全相同,尽管这些东西都是从您的抽象出来的。有了ASP.NET MVC,你需要学习如何独立完成它(这总是一件好事)。

+0

我尝试用'Html.BeginForm'封装每一行,然后创建一个复选框来执行回发。但是当行动到达时,我得到一个新创建的模型,原始值全部丢失。 – Shimmy 2012-11-18 04:30:01

3

您的控制器上的MVC Action方法有点是您的'PostBack'处理程序。

从一个更简单的例子开始;一个简单的HTML表单发布:

<form action="/MyController/MyAction" method="post"> 
    <input type="text" name="myName" /> 
    <input type="submit /> 
</form> 

现在在您的控制器操作中,您可以获取发布的值并执行您的任务。完成后,让浏览器回来它需要的东西:

public class MyController: Controller 
{ 
    public ActionResult MyAction(string myName) 
    { 
     // Do something with myName 
     return new ContentResult { Content = "Hello " + myName }; 
    } 
} 

至于复选框,它是不同的。你需要学习Javascript(jQuery是最常用的库),并使用它来发布操作。例如,您可以连接复选框'onclick()' event并执行XHR--浏览器特定的Javascript操作,post (you can use jQuery for that too)到您的控制器。

因此,您需要开始思考不同于webforms抽象,并参与HTML,HTTP和Javascript。

0

你可以把这样的一个MVC剃刀页面内:

if (Request.HttpMethod=="POST") { 
}