Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何从视图获取控制器的状态数据?_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 如何从视图获取控制器的状态数据?

Asp.net mvc 如何从视图获取控制器的状态数据?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我是MVC的新手,对在MVC中维护状态有一些疑问: 1:据我所知,控制器可以通过ViewBag、ViewData等向视图提供状态数据。但是如何从视图将该状态数据返回控制器?似乎使用ViewBag等只是一个单向行程,不利于维护状态 2:在MVC中,会话的使用是不受欢迎的还是被视为管理状态的“老办法”?如果是这样的话,在没有像会话这样的“全局”工具的情况下,如何管理状态 我在网上搜索了这些问题的答案,但到目前为止只找到了不完整的答案 另外,如果有必要的话,我正在使用MVC5和EntityFramew

我是MVC的新手,对在MVC中维护状态有一些疑问:

1:据我所知,控制器可以通过ViewBag、ViewData等向视图提供状态数据。但是如何从视图将该状态数据返回控制器?似乎使用ViewBag等只是一个单向行程,不利于维护状态

2:在MVC中,会话的使用是不受欢迎的还是被视为管理状态的“老办法”?如果是这样的话,在没有像会话这样的“全局”工具的情况下,如何管理状态

我在网上搜索了这些问题的答案,但到目前为止只找到了不完整的答案

另外,如果有必要的话,我正在使用MVC5和EntityFramework6

  • ViewBag
    确实是单向的。它不用于数据的持久性,坦率地说,应该几乎完全避免使用它。除了极少数例外,任何您认为可能需要查看的
    ViewBag
    都最好使用视图模型

  • 我不知道你是从哪里得到这个想法的,会议是不受欢迎的,或者是一些如何“旧的方式”。会话是状态在web上的保存方式,没有其他内容。如何处理会话是有争议的(cookies、内存中、数据库持久化等),但一般使用会话并没有什么错


  • (作为以上第2条的警告,值得一提的是,我是从网站或应用程序的角度讲的。如果你说的是API,那是完全不同的蠕虫。API,至少那些遵循REST约定的API,完全不鼓励会话。会话是REST的对立面,REST依赖于无状态na实际上,您使用ViewBag发送的数据可以通过GET和POST参数发送回控制器(所有数据的发送方式)

    以下是使用ViewBag(输出)和
    (输入)来回传递数据的示例

    公共类HomeController:控制器
    {
    公共视图结果编辑()
    {
    //让我们发送这个,看看视图是否可以返回它。
    ViewBag.UserID=1;
    返回视图();
    }
    [HttpPost]
    公共操作结果编辑(int userID)
    {
    int userID=userID;//在这里放置一个断点并验证我们的小测试。
    返回视图();
    }
    }
    //这是你的观点
    @使用(Html.BeginForm()){
    }
    
    管理国家

    使用ViewBag传递状态并不少见,例如管理分页功能的页面索引。在这种情况下,我们不希望仅为与模型没有任何关系的单个属性(PageIndex)创建ViewModel。只要您的意图是显而易见的,我就说

    会话的正确使用取决于您尝试维护的状态类型(以及业务需求)。如果您使用会话管理UI的状态,则这是不好的。但是,如果您试图在需要安全性的网站(如银行网站)中保护用户帐户id之类的状态,则强烈建议使用会话(如果不是唯一可接受的话)

    会话是一种工具,和大多数工具一样,如果滥用,人们会皱眉

    不同类型的状态不应通过一种方法进行管理,而应通过多种不同的方法进行管理

    管理状态的方法


    我建议您查看上的教程。它们会让您开始学习基本知识。ViewBag和排序通常是个坏主意,您希望尽量避免使用它们。这就是为什么您使用模型。控制器将模型传递到视图,视图将模型传递回控制器。
    public class HomeController : Controller
    {
        public ViewResult Edit()
        {
            // Lets send this one, and see if the view can return it.
            ViewBag.UserID = 1; 
    
            return View();
        }
    
        [HttpPost]
        public ActionResult Edit(int userID)
        {
            int userID = userID; // Place a breakpoint here and verify our little test.
            return View();
        }
    }
    
    // This is your view
    @using (Html.BeginForm()) {
    
        <input type="hidden" value="@ViewBag.UserID" />
        <input type="submit" value="Save" />
    }