我正在修改其他一些开发人员实现的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"
相同的值,然后将检查结果(true
或false
为bool
值)分配给client.AttributeName
。。。
看起来好像是将client.attributename(boolean)设置为true或false,具体取决于请求中的值[" attributeName"]等于字符串" false,true"
不确定它应该做什么 - 您没有发布太多信息。