2011-12-27 32 views
5

Vấn đề là đặt biến C# trong hàm JS trong một @Section tạo javascript không đúng (chỉ trong MVC 4).ASP.NET MVC 4 - Dao cạo bên trong hàm Javascript Trong phạm vi @Section gây ra lỗi phạm vi

Trong hàm JS trong MVC 3, mọi thứ sẽ hoạt động như mong đợi.

@section test { 

<script type="text/javascript"> 
    $(function() { 
     alert(@DateTime.Now); 
    }); 
</script> 
} 

Lấy cùng mã chính xác này và đặt mã đó vào ứng dụng MVC4 và bạn sẽ nhận được JS không đúng định dạng.

HTML trên trang sẽ thực sự làm cho những điều sau đây:

<script type="text/javascript"> 
    $(function() { 
     alert(12/27/2011 11:04:04 AM); 

và html sẽ phát ra

); }

Lưu ý rằng thẻ tập lệnh đóng không được tạo.

Dường như dấu ngoặc nhọn đóng trong hàm JS bị nhầm lẫn là dấu ngoặc nhọn đóng trong Dao cạo.

Lưu ý rằng tôi cũng đang tuyên bố một RenderSection ("test", false ") trong tập tin _Layout.cshtml tôi.

+0

wow, bài đăng này khiến tôi phát hiện ra về mvc4 ... –

Trả lời

1

Tôi đã nhìn thấy vấn đề như thế này. Quấn tuyên bố cảnh báo của bạn trong <text></text> thẻ

+0

Đây là suy nghĩ ban đầu của tôi. Tôi đã thử nó cũng như cú pháp @: nhưng không giải quyết được vấn đề phạm vi. –

2

những gì tôi đã kết thúc làm cho bây giờ đã được phát JS func đóng cửa trong @ Html.Raw().

Do đây là dễ dàng như vậy để tái tạo, tôi sẽ nộp này là một lỗi cho Microsoft.

@section test { 
    <script type="text/javascript"> 
     $(function() { 
      alert(@DateTime.Now); 
     @(Html.Raw("});")) 
    </script> 
} 
4

tôi biết đã là một mưu chước kể từ khi câu hỏi được hỏi, nhưng bạn cũng có thể thử một cái gì đó như thế này.

@section test { 
    <script type="text/javascript"> 
     $(function() { 
      alert(@(DateTime.Now)); 
     }); 
    </script> 
} 

Lưu ý "()" sau @.

Hy vọng trợ giúp này.

0

Chắc chắn là một lỗi. Tôi thích cách giải quyết này hơn cách bạn đăng. Đối với một số lý do, các yếu tố dao cạo khác dường như giải thích các dấu ngoặc chính xác, vì vậy tôi chỉ cần bọc nội dung tập lệnh vào một bộ niềng răng khác.

@section test { 
if (true) { 
<script type="text/javascript"> 
    $(function() { 
     alert(@DateTime.Now); 
    }); 
</script> 
} 
} 
3

Xin lỗi, tôi không thể không kêu vang ở đây ... Tôi không thấy cú pháp trong câu hỏi ban đầu thực sự hoạt động như thế nào. Khi tôi thử nó trong MVC3, trong VS2010, nó đặt một dòng màu xanh lá cây nguệch ngoạc dưới "DateTime", và khi bạn di chuột qua đó, nó nói "Điều kiện biên dịch bị tắt".Nhưng nếu tôi bao quanh nó trong dấu ngoặc kép, nó làm việc, như trong:

@section test { 

<script type="text/javascript"> 
    $(function() { 
     alert("@DateTime.Now"); 
    }); 
</script> 
} 

Và sau đó khi tôi chạy nó (F5) nó sẽ hiển thị cảnh báo JavaScript như mong đợi, và khi tôi xem nguồn nó ám:

<script type="text/javascript"> 
    $(function() { 
     alert("07/09/2012 10:41:26"); 
    }); 
</script> 
Các vấn đề liên quan