在 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 Core Tag Helpers