Asp.net-Core

ASP.NET Core - 發布後更改表單值

  • March 24, 2021

我可能遺漏了一些非常明顯的東西,但我想做的只是有一個簡單的表單,允許它發布,更改其中一個欄位,當它返回時它應該向我顯示更改後的值。很簡單,對吧?

該模型如下所示:

public class TestModel
{
   public string Field1 { get; set; }
   public string Field2 { get; set; }
}

控制器動作:

public IActionResult Test()
{
   return View(new TestModel());
}

[HttpPost]
public IActionResult Test(TestModel model)
{
   model.Field1 = "changed"; // this seems to be ignored
   return View(model);
}

風景:

@model AspNetCoreTest1.Models.TestModel
<form method="post" asp-controller="Home" asp-action="Test">
   <input asp-for="Field1" />
   <br />
   <input asp-for="Field2" />
   <br />
   <button type="submit">Send</button>
</form>

我可以看到表單並返回(我可以看到我在模型中輸入的值),但是在 POST 之後表單仍然顯示我輸入的值。它不會顯示changed在第一個欄位中。

(我使用的是 ASP.NET Core 1.1)

想法?

我們不能直接對傳遞的模型進行更改,希望它能反映在 UI 中。您的問題的解決方案如下。

model.Field1 = "changed";如果您使用的是 C# 6.0,請將此程式碼行替換為以下程式碼:

ModelState.FirstOrDefault(x => x.Key == nameof(model.Field1)).Value.RawValue = "changed";

對於早期的 C# 版本:

ModelState.FirstOrDefault(x => x.Key == "Field1")).Value.RawValue = "changed";

你可以打電話:

ModelState.Clear();
return View(YourModel);

這將清除所有 ModelState 值

引用自:https://stackoverflow.com/questions/41775756