C# 在POST期间调用默认构造函数,我将丢失所有模型数据

C# 在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

我遇到一个问题,表单发回,模型丢失。一旦页面被发回。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>
如果这样做,则不会调用默认构造函数,但
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);
    }
}