1.Test是我写的一个类,属性Tester是bool类型;
2.我在Action()里赋值Tester=true;
3.我想通过post方式提交到服务端,并取得Tester值。所以我放在了form表单里;
<form method="POST" action="">
<input name="Tester" value="@Model.Tester" />
<input type="submit" />
</form>
结果Tester值是"value"。
不知道的东西在眼里总是奇怪的。麻烦大家解释下。。。
这个问题是不可能的,是否你代码有问题?贴出你相对完整的代码看看。
页面代码:
@model MvcTest.Controllers.Test
@{
Layout = null;
//这个地方得到是true;
bool result = Model.Tester;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>表单提交</title>
</head>
<body>
<form method="POST" action="">
<input name="Tester" value="@Model.Tester" />
<input type="submit" />
</form>
</body>
</html>
后端代码:
方法:
public ActionResult FormPost()
{
Test model = new Test();
model.Tester = true;
return View(model);
}
model:
public class Test
{
public bool Tester { get; set; }
}
运行这个view看到:
@paulhe: 直接<input name="Tester" value="@result" />呢?从你的代码,明显不应该是这样的。
此外,换一个数据,比如name,类型字符串,又是什么结果?换乘整数呢?
如果字符串、整数都OK,那就邪门了。
如果整数与字符串也是显示value,就可能是你的VS编译系统的问题,可能需要把MVC重新安装一下。
@519740105: 我测过了,换成result,结果还是value。字符串和整型是正常的。
另外测试发现一组数据。
同样是bool类型的变量为true时,
在asp.net里的input,value显示true;
在razor视图里,Model.Tester的值跟html标签属性有关:
会出现:
value="value",
id="id",
name="name"
在别人的机器上也是哦。不理解。。。有兴趣你可以试下。
@paulhe: 我试了,不仅仅是input,让任何html对象的属性设置值为true时,都会出现这个现象,而且这个值的内容也跟对应属性的名称的大小写有关系,同时,如果是false时,这个属性是不会输出的。
目前能解决这个问题的办法是:
@true.ToString()
这个应该是MVC的@语法的有意为之,但怎么样规避,还有待研究。
@519740105: 多亏你的提点,value="Model.Tester.ToString()",解决了这个问题。
我以为ToString()后会转成字符串,实际上post提交到后台是true。
感谢。
求解...
结果Tester值是"value"。
这个value是你在html网页源代码中看到的还是在提交到后台后看到的
是页面中input的value值,我把代码和运行后的效果图贴下面了。