English 中文(简体)
在 mvc3 的 Javascript 中, 临时数据不工作吗?
原标题:tempdata not working in javascript in mvc3?

当我开始与 asp mvc3 合作时, 我把我的脚本放进我的视图文件(cshtml) 。 我这样做的时候: 在每个 cshtml 文件的底部, 我把我的脚本,... 。 其中一些脚本使用TempData, 一切都很好。

但后来有人告诉我,这是让用户看到我如何编码我的脚本的坏习惯。 他们说,我应该建立一个 Js 文件,把所有的脚本放进去,我应该这样称呼他们:

 <script src="@Url.Content("~/Scripts/myOwnLocalScripts.js")" type="text/javascript"></script>.

但我的脚本现在似乎无法阅读TempData甚至会话曲奇。

 var currentEmployee =  @System.Web.HttpContext.Current.Session["UserNumber"] ;
 $( .textBoxEmployeeNumber input[id="EmployeeId"] ).val(currentEmployee);

它应该显示一个用户编号, 但是它作为一个字符串显示“ system. Web. HttpContext.

此外,我的剧本里也有这样的代码:

  if ( @TempData["successMessage"]  != "" ||  @TempData["successMessage"]  != null) {
    function newAlert(type, message) {
        $("#alert-area").append($("<div class= alert alert-success " + type + " fade in  data-alert><p><b> " + message + " </b></p></div>"));
        $(".alert-success").delay(4000).fadeOut("slow", function () { $(this).remove(); });
    }
    newAlert( success ,  @TempData["successMessage"] );
}

只有当 Tempdata [sessMessage] 包含一个值时, 它才应该显示, 但是它每次每次显示页面加载时都会显示, 并且它作为字符串显示@ TemmpData [“sessMessage ”...

我的错误是什么?

最佳回答

语法仅在 Razor 文件( .cshtml ) 内对服务器进行解释。 在 JavaScript (.js ) 文件中, 并不特殊 -- -- 在这种情况下,这只是字符串字典中的另一个字符 。

关于:

然后有人告诉我,这是一个坏习惯 让用户看到我如何编码我的脚本

这不是分离 .js 文件的实际原因 -- -- 如果浏览器能读到 JavaScript, 用户也可以读到它 。

它们实际上有用的是允许您成为 < a href=" http://en.wikipedia.org/wiki/ Don%27t_repeat_ yourself" rel=“ nofollow”>DRY , 定义一次共同功能, 以纳入多个视图, 并允许浏览器在视图更新时隐藏脚本 。

因此,如果这些是共同的任务,请在 .js 中为其定义可从 .cshtml 调用的函数:

.js :

function setCurrentEmployee(currentEmployee) {
    $( #EmployeeId ).val(currentEmployee);
}

function newAlert(type, message) {
    if (message != "" || message != null) {
        $("#alert-area").append($("<div class= alert alert-success " + type + " fade in  data-alert><p><b> " + message + " </b></p></div>"));
        $(".alert-success").delay(4000).fadeOut("slow", function () { $(this).remove(); });
    }
}

.cshtml :

<script>
    setCurrentEmployee( @System.Web.HttpContext.Current.Session["UserNumber"] );
    newAlert( success ,  @TempData["successMessage"] );
</script>
问题回答

如果您不想在您的 cshtml 中使用内线正文, 请使用 JavaScriptModel ( < a href="http://jsm.codeplex. com" rel= "nofollow" > http://jsm.codeplex. com )。

您只需在控制器动作中写入以下代码 :

this.AddJavaScriptVariable("CurrentEmployee", System.Web.HttpContext.Current.Session["UserNumber"]);
this.AddJavaScriptVariable("SuccessMessage", successMessage);
this.AddJavaScriptFunction("ReadyFunction");

js:

var CurrentEmployee;
var SuccessMessage;
function ReadyFunction()
{
    setCurrentEmployee(CurrentEmployee);
    newAlert("success" SuccessMessage);
}

您也可以在控制器动作中写入以下代码:

this.AddJavaScriptFunction("setCurrentEmployee", System.Web.HttpContext.Current.Session["UserNumber"]);
this.AddJavaScriptFunction("newAlert", "success", successMessage);

但我建议你第一种解决办法 因为你可以重新使用 现职员工 在别处 在你的刺绣。





相关问题
selected text in iframe

How to get a selected text inside a iframe. I my page i m having a iframe which is editable true. So how can i get the selected text in that iframe.

How to fire event handlers on the link using javascript

I would like to click a link in my page using javascript. I would like to Fire event handlers on the link without navigating. How can this be done? This has to work both in firefox and Internet ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Clipboard access using Javascript - sans Flash?

Is there a reliable way to access the client machine s clipboard using Javascript? I continue to run into permissions issues when attempting to do this. How does Google Docs do this? Do they use ...

javascript debugging question

I have a large javascript which I didn t write but I need to use it and I m slowely going trough it trying to figure out what does it do and how, I m using alert to print out what it does but now I ...

Parsing date like twitter

I ve made a little forum and I want parse the date on newest posts like twitter, you know "posted 40 minutes ago ","posted 1 hour ago"... What s the best way ? Thanx.

热门标签