【问题标题】:Rendering same View after Http Post in MVC在 MVC 中的 Http Post 之后渲染相同的视图
【发布时间】:2023-03-26 01:07:01
【问题描述】:

尝试重新发布视图,但我想要的字段为空。

这是控制器...

    public ActionResult Upload()
    {
        VMTest vm = new VMTest();
        return View(vm);
    }

    [HttpPost]
    public ActionResult Upload(VMTest vm, String submitButton)
    {
        if (submitButton == "Upload")
        {
            //do some processing and render the same view
            vm.FileName = "2222";           // dynamic creation of filename
            vm.File.SaveAs(@vm.FileName);   // save file to server
            return View(vm);
        }
        else if (submitButton == "Save")
        {
            //read the file from the server
            FileHelperEngine engine = new FileHelperEngine(typeof(PaymentUploadFile));
            PaymentUploadFile[] payments = (PaymentUploadFile[])engine.ReadFile(@vm.FileName);  // the problem lays here @vm.FileName has no value during upload

            //save the record of the file to db
            return View("Success");
        }
        else
        {
            return View("Error");
        }
    }

我的视图中已经有一个@Html.HiddenFor(model => Model.FileName)。

但我仍然得到 Model.FileName 的空值。

请帮忙

谢谢

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    如果您打算在 POST 操作中修改视图模型的某些值,您需要先从模型状态中删除旧值:

    ModelState.Remove("FileName");
    vm.FileName = "2222"; 
    

    这是因为诸如 TextBox、Hidden 等 Html 助手在绑定时将首先使用模型状态中的值,然后再使用视图模型中的值。

    也代替:

    @Html.HiddenFor(model => Model.FileName)
    

    你应该使用:

    @Html.HiddenFor(model => model.FileName)
    

    注意表达式中的小写m

    【讨论】:

    • 非常感谢......我花了几天时间来解决这个问题......只有 ModelState.Remove 是关键......谢谢@Darin
    【解决方案2】:

    上面的答案很好。您还可以执行以下操作

    public ActionResult Upload()
    {
        VMTest vm = new VMTest();
    
        ModelState.Clear();
    
        return View(vm);
    }
    

    我通常在加载新视图之前调用 ModelState.Clear()。 HiddenFor 的语法应该是

    @Html.HiddenFor(m => m.FileName);
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多