MVC 控制器中的逻辑比较,在提交表单后使用字符串"false,true"。为什么?



我正在修改其他一些开发人员实现的C#MVC Web应用程序,有时我会发现以下逻辑比较:

client.AttributeName = Request["AttributeName"] == "false,true";

这是正确的表达方式吗?如果是这样,这应该怎么办?

在MVC中您不需要从Request对象中获取值 - 您应该将它们在传递到操作的模型或参数中获取。

如果您有两个带有相同名称的HTML输入,则结果在结果中被逗号分开。

我猜您有一个ASP.NET生成的复选框,因为这实际上输出了类似的内容:

<%:Html.Checkbox("AttributeName")%>

变为:

<input name="AttributeName" type="hidden" value="false" />
<input checked="checked" id="AttributeName" name="AttributeName" type="checkbox" value="true" />

第二个输入存在,因为如果HTML复选框输入为false,则在帖子数据中没有发送任何内容。此HTML意味着返回的值将是:

  • "false,true"如果检查了复选框
  • "false"如果复选框为不是检查

ASP.NET的操作人员知道如何应对这一点,但您的前任没有。

这是为什么.NET这样做的另一个问题。

要修复它,您可以依靠MVC内置的处理:

public ActionResult YourAction(bool AttributeName) 
{
    client.AttributeName = AttributeName; 
}

MVC已经知道仅接受逗号分隔列表中的最后一个帖子后值,因此,如果您将"false,true"发布到上述AttributeName的方法是正确的。

我不知道那是正确的,因为您没有说出它应该做什么。

,但我可以告诉你它的作用:

client.AttributeName = Request["AttributeName"] == "false,true";

从右到左:检查Request["AttributeName"]是否具有与"false,true"相同的值,然后将检查结果(truefalsebool值)分配给client.AttributeName 。。。

看起来好像是将client.attributename(boolean)设置为true或false,具体取决于请求中的值[" attributeName"]等于字符串" false,true"

不确定它应该做什么 - 您没有发布太多信息。

最新更新