POST期间调用默认构造函数,我将丢失所有模型数据
本文关键字:数据 模型 调用 默认 构造函数 POST | 更新日期: 2023-09-27 18:29:26
我遇到了一个问题,表单正在返回,模型正在丢失。页面一发布回来,.net就调用该对象的默认构造函数,即使该对象已经存在。
我有两个操作,一个用于GET,另一个用于POST
[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>
当存在要传递的现有模型时,为什么要调用默认构造函数?
我已经尝试以如下形式指定模型:
using (Html.BeginForm("Quote", "Home", new { @qm = Model}, FormMethod.Post)
如果我这样做,则不会调用默认构造函数,但qm
为null。
我一直在这里兜圈子,试图弄清楚这一点。有人能解释我做错了什么吗?
您可以通过重载构造函数来解决这个问题,并且只显式调用布尔参数设置为true的第二个构造函数。
型号
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);
}
}