【问题标题】:how to call my javascript function from within this specific context如何在这个特定的上下文中调用我的 javascript 函数
【发布时间】:2012-05-10 14:26:40
【问题描述】:

谁能告诉我如何在以下上下文中调用函数 GetDuration:

@{
...
...
<div>  GetDuration(@item.StartDate, @item.EndDate) </div>
...
...
}

GetDuration() 函数在我的上下文中提到的父 DIV 内动态创建另一个 DIV。

我有两个问题:

  • 我不知道如何从代码中显示的位置调用我的函数GetDuration()
  • startdatum.Month.ToString("MMMM"); 返回 "MMMM" 而不是月份的名称

提前致谢!

这是我的代码:

<script type="text/javascript">

function GetDuration(startdatum, einddatum) {
    var maand1 = startdatum.Month.ToString("MMMM");
    var maand2 = einddatum.Month.ToString("MMMM");
    var duration = "Date: ";
    if (maand1 == maand2) {
        duration += item.Startdate.Day.ToString()
            + " - " + item.Enddate.Day.ToString()
            + " " + maand1
            + " " + item.Startdate.Year.ToString();
    }
    else {
        duration += item.Startdate.Day.ToString()
            + item.Startdate.Month.ToString("MMMM")
            + " - " + item.Enddate.Day.ToString()
            + " " + item.Enddate.Month.ToString("MMMM")
            + " " + item.Startdate.Year.ToString();
    }
    var dynDiv = document.createElement("div");
    dynDiv.class = "HP_DateDiv";
    dynDiv.innerHTML = duration;
    document.body.appendChild(dynDiv);
}

</script>


    @{  string prevYear = "";

    foreach (var item in ViewData.Model) {

        string year = item.StartDate.Year.ToString();
        if (year != prevYear)
        {
            <div class="contentheader"> 
                @year Formula 1 Tickets
            </div>

            prevYear = year;  
        }
        <div class="HP_eventBodyDiv">
            <div class="HP_picDiv" style = "width:100px; height:100px;">
                <a href="http://www.cssdrive.com/" class="highlightit"><img  src="../../Content/Pics/auto.jpg" alt="oto" height="50" width="50"/></a>
            </div>
            <div class="HP_eventDiv">
                <div class="HP_eventNameDiv">@item.Name
            </div>
<!--This is the spot to call my function with something like "GetDuration(@item.StartDate, @item.EndDate)"-->
                <div class="HP_viewBuyBtnsDiv">
                    <input id="btn_View" type="button" value="View Event" class="contentbtn"/>
                    <input id="btn_Buy" type="button" value="Buy Tickets" class="contentbtn"/>
                </div>
            </div>
        </div>            

        };
     }

【问题讨论】:

  • 我错过了什么吗? GetDuration 看起来不像 JavaScript,它位于 text/javascript 脚本块中...
  • 欢迎来到Stack Overflow。请花一些时间阅读faq。如果您花一些额外的时间来确保您的帖子格式正确且易于阅读,我们将不胜感激。
  • &lt;div&gt;&lt;script&gt;GetDuration(@item.StartDate, @item.EndDate)&lt;/script&gt;&lt;/div&gt;? @ 是干什么用的?
  • 你不能像那样混合 JavaScript 和 HTML 吗?你在做什么?
  • 这就是 MVC.net Razor 语法。你根本不能这样调用java脚本。您所有的脚本都应该放在标题标签中。使用 jQuery 或从 HTML 外部管理 DOM

标签: javascript razor


【解决方案1】:

我想看看能不能给你解释一下。 Razor Syntax 允许我们做一些很棒的事情,比如你在你的视图上做的事情。遍历视图上的集合的能力非常棒,并且可以为创建动态页面提供一些很好的灵活性。 他们的服务器实际上是使用您提供的语法创建 Razor 视图,然后将构建 HTML 页面发送到客户端。这包括脚本标签。因此,您尝试做的事情实际上行不通。您不能像那样在 @foreach 中迭代调用 JavaScript 函数,因为该页面尚未呈现。 只有在 Razor 视图完全形成后,您才应该考虑使用 Javascript。然后你可以使用 JavaScript 来编辑 DOM。

所以我的建议是 EDIT 所说的。让服务器计算该属性并将其与模型一起发送。

编辑:

在查看更新的代码后稍等,我认为您的做法是错误的。我不明白你为什么使用 javascript 来计算你的持续时间。您应该编辑您正在传递的模型以包含持续时间,特别是如果它是这样的计算字段。那么您可以像显示任何其他属性一样显示 Duration。

编辑 2:

public class MyNewClass
{
public DateTime StartDate {get;set;}
public DateTime EndDate {get;set;}
public int Duration
{
get{
//Do your Logic Here with startdate and enddate
}
set;
}
}

【讨论】:

  • 对不起,我不明白你的意思。我的视图顶部已经有一个脚本标签,但结束标签在中间的某个地方,我继续使用@{......CODE....}
  • 是的,这是可能的,但我认为他会更好。我似乎在不断更新我所有的网络服务以满足我的需要,而我确实故意试图保持我的网络服务通用。我以前从未使用过 jQuery。有这种可能吗?为什么我可以从例如 onclick 事件调用我的函数,但不能从 DIV 内容中调用?
  • 您可以进行单击,因为在创建所有元素之前不会引发单击事件。您尝试在创建元素之前调用 JavaScript。同样为此,您无需编辑您的服务。在您的客户端上创建一个具有计算字段的新模型,并将 WebService 对象映射到新创建的客户端模型。
  • 但如果我在 onclick 事件中执行此操作.......那么我必须在脚本运行之前单击。 .........或者我完全错过了这里的重点??
  • 是的,我认为我的解释不正确。在所有迭代完成之前,Razor Views 永远不会访问客户端。在客户端上的数据可用之前,无法运行 JavaScript。因此 JavaScript 不能在迭代期间运行
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 2023-01-08
  • 2011-07-18
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多