这个问题与 POST方法、重新显示带有提交表单的视图或将输入值绑定到控制器方法参数无关。这纯粹是关于使用 html 帮助程序(HiddenFor或Hidden - 两者返回相同)呈现视图。
我使用HiddenFor助手创建了一个简单的隐藏字段
@Html.HiddenFor(m => m.ProductCode)
Run Code Online (Sandbox Code Playgroud)
我的问题是这个隐藏字段的值呈现为空:
<input id="productCode" name="productCode" type="hidden" value/>
Run Code Online (Sandbox Code Playgroud)
即使我在实例化模型时设置了它,当然它也通过调试得到确认(它总是有一个值)。
所以它应该是这样的:
<input id="productCode" name="productCode" type="hidden" value="8888888"/>
Run Code Online (Sandbox Code Playgroud)
因为我知道有一些像这样的问题(实际上所有这些问题都是指在表单 POST 期间更改表单值)我列出了我已经尝试过的事情。我的代码就在这部分的正下方,我认为这是必不可少的。
HiddenFor助手,而是使用纯 html。WORKS,但它只是解决方法,而不是问题的答案。@Html.HiddenFor(m => m.ProductCode)
@Html.HiddenFor(m => m.ProductCode)
Run Code Online (Sandbox Code Playgroud)
PARTIALLY WORKS产生第一个输入 asvalue/>和第二个 asvalue="8888888"/>这表明可能存在隐藏初始属性值的东西。无论如何, …
ReSharper 似乎以一种非常简单(太简单)的方式解决了这种情况:
public ActionResult Payment()
{
IOrder order = PaymentBase.GetOrderFromRequest(this.Request.Params); //this method can return null sometimes
int payForm = order.PayForm;
if (order != null)
PaymentService.Check(order, "push", payForm);
else
LogsService.SaveDataLog(WebShopLogType.PaymentInfo, "order missing on push", (object)this.Request.Params.ToString(), "p");
return new EmptyResult();
}
Run Code Online (Sandbox Code Playgroud)
我的空检查order != null标有“表达式始终为真”消息,因此我的整个else语句都被视为没有必要。
我发现这个假设是基于order.PayForm. ReSharper 假设调用对象的PayForm属性order意味着它肯定不为空。删除此行会消除“表达式始终为真”消息。
它显然应该int payForm = order.PayForm;用“可能为空”消息来标记行。
这是一个错误还是我遗漏了什么?