2015-08-13 11 views
5

Doświadczyłem bardzo dziwnego problemu, którego nie mogę znaleźć.MVC różnica w renderowaniu atrybutów danych HTML

W mojej aplikacji ASP.Net MVC (.net4.0/MVC4) rozdzierałem atrybuty danych html w obrębie jakiegoś elementu html, aby następnie zastosować je w kodzie JavaScript.

Tak więc w aplikacji mam model, np.

public class MyModel{ 
    public bool MyFlag { get; set; } 
} 

ja następnie przepuszczanie tego modelu przez na prostej MVC stronie widoku i nadanie wartości logicznej na atrybutu dane HTML, np

@model MyProject.MyModel 

<a href="#" data-is-flagged="@Model.MyFlag">Click Me</a> 

Teraz po uruchomieniu projektu lokalnie HTML jest wyświetlany jako:

<a href="#" data-is-flagged="True">Click Me</a> 

jednak gdy uruchomiony na serwerze, HTML jest wyświetlany jako:

<a href="#" data-is-flagged="data-is-flagged">Click Me</a> 

Na początku myślałem że może boolean nie był ustawiony w jakiś sposób, więc dodałem to do elementu Click Me @Model.MyFlag, który renderuje jako Click Me True. Teraz podejrzewałem, że może to ma coś wspólnego z trybem Debug vs Release, jednak po zabawie z tym nie robiło to żadnej różnicy.

Moja poprawka polegała na zmianie kodu w celu wyprowadzenia wartości logicznej jako wartości łańcuchowej, np. data-is-flagged="@Model.MyFlag.ToString()", który następnie renderuje się lokalnie i na serwerze.

Jakieś pomysły, jaka jest tego przyczyna?

+0

Czy korzystasz z tej samej przeglądarki podczas testowania wersji lokalnej i testowej wdrożonej wersji? – jadarnel27

+0

@ jadarnel27 ta sama przeglądarka. Wypróbowałem także alternatywne przeglądarki. –

+3

Czy jest możliwe, że masz w jakiś sposób inną wersję mechanizmu wyświetlania maszyn Razor działającego lokalnie w porównaniu z serwerem? Zachowanie, które widzisz na serwerze, wygląda trochę jak funkcja atrybutów html warunkowych wprowadzona w Razorze 2. – Peter

Odpowiedz

3

Cytuję odpowiedź z another website:

Jest to wynikiem warunkowego atrybuty, które zostało wprowadzone do stron WWW 2 (MVC 4): http://www.mikesdotnetting.com/Article/201/Cleaner-Conditional-HTML-Attributes-In-Razor-Web-Pages
dwie opcje: wrócić do Web Pages 1 (MVC 3) lub edytuj wszystkie pliki podlegające usterce.

Jeżeli wartość stosuje się do atrybutu true, rezultatem jest to, że cecha jest powtarzana (to przydatne dla znaczników option wewnątrz select na przykład). Jeśli ustawiona wartość to false, nic nie jest renderowane (nie jest to nazwa atrybutu zdarzenia).

Tak więc, jako komentarze @Jamie i @Peter, możesz mieć inną wersję silnika Razor w swoim środowisku programistycznym.

+1

To wygląda na problem. Dzięki za to. –