C# 在POST期间调用默认构造函数,我将丢失所有模型数据
我遇到一个问题,表单发回,模型丢失。一旦页面被发回。net将调用对象的默认构造函数,即使对象已经存在 我有两个动作,一个用于GET,一个用于POSTC# 在POST期间调用默认构造函数,我将丢失所有模型数据,c#,razor,asp.net-mvc-5,C#,Razor,Asp.net Mvc 5,我遇到一个问题,表单发回,模型丢失。一旦页面被发回。net将调用对象的默认构造函数,即使对象已经存在 我有两个动作,一个用于GET,一个用于POST [HttpGet] public ActionResult Quote(string sku, string network, string grade ) { QuoteModel qm = new QuoteModel(); // build mod
[HttpGet]
public ActionResult Quote(string sku, string network, string grade )
{
QuoteModel qm = new QuoteModel();
// build model here
return View("Quote", qm);
}
[HttpPost]
public ActionResult Quote(QuoteModel qm, string grade, string network)
{
// update model
return View("Quote",qm);
}
GET函数工作得很好,但是一旦发布表单,就会调用默认构造函数,并且我会丢失所有的模型数据
我的看法是:
@model PriceCompare.Models.QuoteModel
<div class="clarify">
@if (Model.clarify == true)
{
using (Html.BeginForm("Quote", "Home", FormMethod.Post))
{
@Html.DropDownList("network", Model.availableNetworks);
@Html.DropDownList("grade", Model.grades);
<button type="submit">Get Quote</button>
}
}
</div>
如果这样做,则不会调用默认构造函数,但qm
为空
我一直在绕圈子,想弄明白这一点。有人能解释我做错了什么吗?您可以通过重载构造函数来解决这个问题,并且只显式调用第二个构造函数,将布尔参数设置为true 模型 建造师
为什么不以不同的方式命名你的帖子呢?应该可以解决问题了…@Charlie我刚刚尝试将POST方法更改为“QuoteUpdate()”,默认构造函数仍然以相同的方式调用尝试替换:@using(Html.BeginForm(actionName:“QuoteUpdate”,controllerName:“Home”)@Charlie它仍然调用QuoteModelMVC的默认构造函数是无状态的。。这意味着数据不会在您的请求之间持久化,将调用默认构造函数,因为它是一个新请求,因此是一个新对象。
using (Html.BeginForm("Quote", "Home", new { @qm = Model}, FormMethod.Post)
public class MyModel
{
public int NumberRequested { get; set; }
// This constructor will be called by MVC
public MyModel()
{
RefreshReport();
}
// Call this constructor explicitly from the controller
public MyModel(bool load)
{
if (!load)
{
return;
}
NumberRequested = 10;
RefreshReport();
}
public void RefreshReport()
{
// Do something
}
}
public class MyController
{
public ActionResult MyView()
{
var myModel = new MyModel(true);
return View(myModel);
}
[HttpPost]
public ActionResult MyView(MyModel myModel)
{
myModel.RefreshReport();
return View(myModel);
}
}