MVC:为什么每次我们点击动作时都会创建控制器对象?

时间:2014-04-02 06:14:12

标签: jquery asp.net-mvc

好吧我有一个家庭控制器和一个动作索引。我的视图从家庭控制器的demo函数中检索值。每次我点击按钮(在索引视图中),它创建homecontroller对象,id是被初始化为1.因此,我在演示函数中的第二个条件没有执行。但是,如果我将id变量设置为静态,它就可以工作。所以,为什么在单击按钮时,每次都会创建控制器对象。为什么每当我们可以对特定对象执行类似操作时,是否需要创建不同的对象?

家庭控制器:

public class homeController : Controller
    {
        //
        // GET: /home/

        public ActionResult Index()
        {
            return View();
        }

        public int id = 1;
        public string demo() 
        {
            if (id == 1)
            {
                id++;
                return "hello";
            }
            id--;
            return "";
        }
    }

索引视图:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>


<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>


<script type="text/javascript">
    $('document').ready(function () {
        $('#b1').click(function () {
            var URL = "/home/demo";
            $.get(URL, function (data) {
                $("#t1").html(data);
            });
        });
    });
</script>


<div>
<p id="t1"></p>
<input id="b1" type="button" value="button1" />
</div>

1 个答案:

答案 0 :(得分:1)

这是一个设计问题。

ASP.NET MVC上,生命周期如下:

HTTP请求 - &gt;路由到MVC处理程序 - &gt;控制器创建 - &gt; 动作方法调用 - &gt;结果(查看)执行 - &gt;回到客户端。

查看Lifecycle of an ASP.NET MVC 5 ApplicationPDF文档内容非常丰富。

特别是在您的示例中,$.get请求会生成新的HTTP请求,您可能希望发送ID或将其保留在控制器之外的位置。