在 asp.net 核心中使用输入标签助手 - “值”为空

Posted

技术标签:

【中文标题】在 asp.net 核心中使用输入标签助手 - “值”为空【英文标题】:Using input tag helper in asp.net core - the "value" is empty 【发布时间】:2021-11-27 19:14:54 【问题描述】:

我是 .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">

据说输入元素的标签助手会渲染所有必要的标签,包括值标签。几个例子(在互联网上)显示渲染的 html 包含

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

这背后一定有原因——但我无法理解。有人可以给我一些想法,为什么 url 包含发布的数据而不是新的数据,以及为什么当我填写这些属性时卖家名称值为空?我之前尝试将值放入 ViewBag 和 ViewData - 但它们都不起作用:

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

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

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

【问题讨论】:

不要只返回 View(),而是遵循 Post Redirect Pattern 并返回 RedirecToAction。 en.wikipedia.org/wiki/Post/Redirect/Get 感谢您的建议 mxmissile :) 第一篇文章来自模态对话框,第二篇返回第二个向导页面。重新发布没有问题。 对不起@mxmissile - 我必须道歉。您为我的问题提供了解决方案 - 但我仍然无法抓住重点......这种模式是否如此深入地涉及 asp.net mvc,所以如果不使用这种模式,这根本行不通吗?这是在基于网络框架的 mvc 之前工作的...... 我添加了一个答案。 【参考方案1】:

你是对的,这是框架中的设计选择。您可以在this blog post 中了解它的制作原因、一些理论以及一些变通方法。

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

但是,无论如何,使用Post Redirect Pattern 的标准“做法”解决了问题。

【讨论】:

感谢您的宝贵时间,陛下!对此,我真的非常感激!帮了很多忙!现在我真的明白发生了什么以及为什么。现在我想知道为什么 MS 网站上关于标签助手的文件没有澄清这一点......还是找不到它的人? :(

以上是关于在 asp.net 核心中使用输入标签助手 - “值”为空的主要内容,如果未能解决你的问题,请参考以下文章

用于引导切换的 asp.net 核心 mvc 标签助手

如何编辑默认的asp.net核心错误标签[重复]

集中位置的 ASP.NET Core Tag Helpers

ASP.NET CORE MVC 选择标签助手 - 如何在不使用 ModelView 的情况下设置选定值

asp.net core 选择标签助手

使用标签助手调用控制器,包括来自 asp.net core mvc 中搜索栏的数据