在 asp.net 核心中使用输入标签助手 - "value" 为空

Using input tag helper in asp.net core - the "value" is empty

我是 .net 5 asp 标签助手的新手。我有这样的模型:

public class MyForm
{
    public String Url { get; set; }
    ...
}


public class MyViewModel
{
    [Required]
    public String Url { get; set; }

    [DisplayName("Seller username")]
    [Required]
    public String SellerName { get; set; }
    ...
}

在我的控制器中,我得到了 URL 值,例如 https://myshop.com/item?id=1234

public IActionResult AddLinkWizardSecond(MyForm form)
{
   var model = new MyViewModel() {
     Url = "https://anotherShop.com/index.html",
     SellerName = "test user 123",
   };
   return PartialView("myView", model);
}

我的观点如下:

@model MyViewModel
<input asp-for="Url" readonly>
<input asp-for="SellerName">

据说输入元素的标签助手会呈现所有必要的标签,包括值标签。几个示例(在 Internet 上)显示呈现的 html 包含

<input name="Url" id="Url" value="https://myshop.com/item?id=1234" ... />
<input name="SellerName" id="SellerName" value="" ... />

这背后一定有原因 - 但我听不懂。有人可以给我一些想法,为什么 url 包含已发布的数据而不是新数据,以及为什么在我填写这些属性时卖家名称值为空?我之前尝试将值放入 ViewBag 和 ViewData - 但其中 none 正在工作:

...
this.ViewData["SellerName"] = model.SellerName;
return PartialView("myView", model);

我对标签助手的要求是不是太多了?他们不能使用当前值?那么发布的值从何而来?

为这个愚蠢的问题道歉:(非常欢迎任何建议,它可以帮助我摆脱现在的绝望深渊:(

你是对的,这是框架中的设计选择。您可以在 this blog post.

中了解它的制作原因、一些理论以及一些解决方法

例如,在您的 Post 操作中调用 ModelState.Clear(); 将显示您正在寻找的行为。

然而,它的标准“实践”使用 Post Redirect Pattern 无论如何,这解决了问题。