|
|
豪气的西瓜 · 块/文件/对象三种存储的优缺点 - ...· 1 年前 · |
|
|
呐喊的海龟 · 如何按行分组或汇总行 - Power ...· 1 年前 · |
|
|
严肃的黄瓜 · 判断一个数字是否快乐数的C#代码· 1 年前 · |
|
|
很拉风的鸭蛋 · RabbitMQ(六) -- ...· 2 年前 · |
|
|
爱旅游的感冒药 · HANA-函数-获取汉字拼音首字母 - 简书· 2 年前 · |
我有一个带有javascript函数的
.csHtml
-razor文件,该函数在内部使用
@Url.Content
C#函数作为ajax URL。
我想将该函数移动到从我的视图引用的
.js
文件中。
问题是javascript不能“识别”
@
符号,也不能解析C#代码。
有没有办法从视图中引用带有"@“符号的
.js
文件?
我认为你不得不把JS代码放在视图中。据我所知,
@
解析器不会查看.js文件,因此任何使用Razor的解析器都不会工作。正如你已经注意到的,PLus本身不喜欢这个
@
字符无缘无故地出现,比如说,在字符串中。
为了将
@
变量放入.js文件中,您必须使用一个全局变量,并从使用该.js文件的mvc视图中设置该变量的值。
JavaScript文件:
var myValue;
function myFunc() {
alert(myValue);
}
MVC视图文件:
<script language="text/javascript">
myValue = @myValueFromModel;
</script>
只需确保对您的函数的任何调用都发生在视图设置了值之后。
我通常将需要访问模型属性的JS包装在函数中,然后在视图中传递@something。例如
<script type="text/javascript">
function MyFunction(somethingPresentInTheView) {
alert(somethingPresentInTheView);
</script>
在视图中,我添加了函数调用方式(只是一个例子):
<input type='button' onclick="MyFunction('@Model.PropertyNeeded')" />
也许这不是正确的方法。考虑关注点的分离。您的
JavaScript
类上应该有一个
data injector
,它在大多数情况下是
JSON
格式的数据。
在
script
文件夹中创建一个JS文件,并将此引用添加到
View
中
<script src="@Url.Content("~/Scripts/yourJsFile.js")" type="text/javascript"></script>
现在,考虑
yourJsFile.js
中的一个
JavaScript
文本类
var contentSetter = {
allData: {},
loadData: function (data) {
contentSetter.allData = eval('(' + data + ')');
setContentA: function () {
$("#contentA").html(allData.contentAData);
setContentB: function () {
$("#contentB").html(allData.contentAData);
};
还要声明一个类
public class ContentData
public string ContentDataA { get; set }
public string ContentDataB { get; set }
}
现在,从您的
Action
执行以下操作:
public ActionResult Index() {
var contentData = new ContentData();
contentData.ContentDataA = "Hello";
contentData.ContentDataB = "World";
ViewData.Add("contentData", contentData);
}
从你的角度来看:
<div id="contentA"></div>
<div id="contentB"></div>
<script type="text/javascript">
contentSetter.loadData('@Json.Encode((ContentData) ViewData["contentData"])');