模型不会更新和呈现'结果'页

时间:2017-03-14 02:29:56

标签: c# asp.net-mvc

我试图从[HttpPost]更新我的模型用户输入他们的职位,我想更新模型并在结果页面上呈现它。但是,它不会根据范围更新模型。默认是"学生"我想让它显示用户输入的内容。

模型

public class InternshipModel {
    public string Employer { get; set; }
    public string Major { get; set; }
    public string Title { get; set; }
}

控制器

Models.InternshipModel mod = new Models.InternshipModel() { Major = "Computer Science", Employer = "Random", Title = "Student" };

    //After Post method
    [HttpPost]
    public ActionResult Index(string major, string employer, string title) {

        mod.Title = title;
        UpdateModel(mod.Title);
        return RedirectToAction("Results", "Home");
    }

    public ActionResult Results() {
        ViewBag.Message = "This is the results page.";
        ViewBag.Changes = mod.Title;  //Should expect user input, not default 'Title'
        return View();
   }

3 个答案:

答案 0 :(得分:1)

您创建的mod变量(控制器的范围),每次移出控制器时重置,或者在评论中提及@stephen,每次创建时都会创建一个新实例请求。

此处,当您返回RedirectToAction("Results","home");

时,您将从控制器移出到路由表

因此,处理此问题的最佳方法是将模型保存在数据库中并在需要的任何位置进行检索。

由于您已经提到过,您将使用此详细信息查询数据库。最好将此对象作为整体发送,或者仅将标题发送到要传递给它的Action。像

return RedirectToAction("Results", "Home", new { InternshipModel = mod });

return RedirectToAction("Results", "Home", new { title = mod.Title });

你会在Action中将它们作为参数接收。

喜欢:

public ActionResult Results(Models.InternshipModel mod)
{
      ViewBag.Message = "This is the results page.";
      ViewBag.Changes = mod.Title;  //User input, not default 'Title'
      return View();
}

希望这有帮助。

答案 1 :(得分:1)

另一种方法是将模型声明为静态,如

Public static Models.InternshipModel mod = new Models.InternshipModel() { Major = "Computer Science", Employer = "Random", Title = "Student" }; 

static中,只有一个模型副本会在应用程序启动时创建,并会保留内存,直到应用程序停止为什么不建议。您可以尝试Stephen的解决方案因为它是实现这一目标的更好方法。

答案 2 :(得分:0)

您可以做的另一个简单更改是在对象声明之前添加static关键字。这将帮助您初始化一个实例,并在调用对象时反映您的最新值

a{
    text-decoration:none;
    padding: 5px;
    border-radius: 10px;
    color:white;
    background:rgb(0,176,240);
    border:none;
}
ul li{
    list-style-type:none;
    display:inline;
    cursor:pointer;
    float: left;
    width: auto;
    padding-left: 6px;
}
ul li:hover a{
    background:orange;
}
ul li:hover ul{
    width: 100%;
    visibility: visible;
}
ul li ul{
    display:block;
    padding-left:5px;
    padding-top:5px;
    visibility: hidden;
    position: absolute;
    left: 0;
    line-height: 40px;
}
div ul{
    width:100%
}
ul li div{
    visibility: hidden;
    position:absolute;
}
ul li div div ul{
    display:none;
}
ul li:hover div{
    visibility: visible;
}
ul li div div{
    display:block;
}
ul li ul li div div h3{
    display:inline;
    text-decoration:none;
    padding: 5px;
    border-radius: 10px;
    color:white;
    background:rgb(0,176,240);
    border:none;
}