Quantcast
Channel: ASPNETWebStack Issue Tracker Rss Feed
Viewing all articles
Browse latest Browse all 7215

Commented Issue: Razor outputs the string "value" or completely removes value attribute instead of True or False for booleans when building input fields without using helper methods. [474]

$
0
0
I was creating some views where I used html for all my input fields instead of using the helper methods. I had some hidden fields that contained boolean values. I've done this often in MVC 3 and it was never a problem, but in MVC 4 Razor if the value of the boolen is true then it outputs the string "value" if the boolean is false then it completely removes the value attribute from the input.

I created a small test application using the basic webapplication template in VS2012,

ViewModel:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace target45.ViewModels
{
public class IndexViewModel
{
public bool test1 { get; set; }
public bool test2 { get; set; }
public bool test3 { get; set; }
public bool test4 { get; set; }
}
}

```
Controller:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using target45.ViewModels;

namespace target45.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
IndexViewModel model = new IndexViewModel()
{
test1 = true,
test2 = false,
test3 = true,
test4 = false
};
return View(model);
}
}
}
```

View:
```
@model target45.ViewModels.IndexViewModel

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
bool test = true;
}

<div>
<h2>test 1</h2>
<input type="hidden" value="@Model.test1" />
<input type="text" value="@Model.test2" />
<input type="password" value="@Model.test3" />
@Model.test4
@test
<input type="text" value="@test" />
<input type="text" value="@false" />
</div>
<div>
<!-- Shows that Razor acts correctly after invalid html -->
<h2>test 2</h2>
<" />
<input type="hidden" value="@Model.test1" />
<input type="text" value="@Model.test2" />
<input type="password" value="@Model.test3" />
@Model.test4
<input type="text" value="@test" />
<input type="text" value="@false" />
</div>

Outputted HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link href="/Content/site.css" rel="stylesheet"/>

<script src="/Scripts/modernizr-2.5.3.js"></script>

</head>
<body>


<div>
<h2>test 1</h2>
<input type="hidden" value="value" />
<input type="text" />
<input type="password" value="value" />
False
True
<input type="text" value="value" />
<input type="text" />
</div>
<div>
<h2>test 2</h2>
<" />
<input type="hidden" value="True" />
<input type="text" value="False" />
<input type="password" value="True" />
False
<input type="text" value="True" />
<input type="text" value="False" />
</div>

<script src="/Scripts/jquery-1.7.1.js"></script>


</body>
</html>
```

I forgot to mention, in my second test I add an error to the html, after doing that Razor outputs the correct values.

I originally submitted this under the old project page: http://aspnet.codeplex.com/workitem/10320
but I realized it probably belongs here.
Comments: That makes sense, but I really don't like that the value attribute on input tags is treated like any other attribute on any other tag.

Viewing all articles
Browse latest Browse all 7215

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>