【问题标题】:ASP.Net accessing model parameters within functionASP.Net 在函数内访问模型参数
【发布时间】:2015-06-21 12:36:48
【问题描述】:

我有一个.cshtml 文件,我正在使用该模型:

@model IEnumerable<WebApplicationMVCTest.Models.Test>

模型包含参数Date(以及其他参数)。我在创建表时访问此值:

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.SiteID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Date)
                </td>
        ...

我的代码 NotTested 中有一个函数,我想将 item.Date 值作为参数之一传递给函数:

<script>
         document.onload = NotTested("Site 001", item.Date);

         function NotTested(SiteId, TestDate) { ... }
</script>

问题有两个方面。 1) 我知道 Date 是此视图中模型的一部分,因此在调用函数时它存在 onload,但是 2) model 在代码的 &lt;script&gt; 部分中脱离上下文。

我知道 item 不存在 onload 因为这对于 for 循环来说只是暂时的。我刚刚使用了item.Date 作为占位符参数。

调用函数时如何访问它?

【问题讨论】:

  • 您要为模型中的每个项目调用此函数吗?
  • 没有。只有日期项,并且仅在表单加载时
  • 我的意思是你有一个循环 - 所以你想为集合中的每个项目传递 Date 属性吗?
  • 如果是这样,有很多方法可以做到这一点 - 例如将模型分配给一个javascript变量=引用this answer,但最简单的方法是添加一个类名(比如)&lt;td class="date"&gt;@Html.DisplayFor(modelItem =&gt; item.Date)&lt;/td&gt;元素并使用$('.date').each(function() { NotTested("Site 001", $(this).text()) });
  • Date 项目实际上是相同的,因为我正在加载模型。它是“其他”参数在循环遍历表格时发生变化。这就是为什么我可以称之为onload 并知道Date 是一样的。

标签: c# asp.net-mvc


【解决方案1】:

在您的 cmets 中,Date 属性对于您集合中的每个项目都是相同的,因此您可以使用将其分配给 javascript 变量

var date = JSON.parse('@Html.Raw(Json.Encode(Model[0].Date))');

或在控制器中,分配给ViewBag.Date = yourDate;并在脚本中

var date = JSON.parse('@Html.Raw(Json.Encode(ViewBag.Date))');

然后您可以使用调用函数使用

<script>
  $(function() {
    var date = JSON.parse('@Html.Raw(Json.Encode(ViewBag.Date))');
    NotTested("Site 001", date);
  });
</script>

【讨论】:

  • 这非常有效。仅供参考,我使用了ViewBag.Date 方法
【解决方案2】:

为日期项分配一个css类,并使用jquery根据css类选择日期项,如下所示:

@Html.DisplayFor(modelItem => item.SiteID, new { htmlAttributes = new { @class = "mySiteIDClass" } })

@Html.DisplayFor(modelItem => item.Date, new { htmlAttributes = new { @class = "myDateClass" } })

<script>
         document.onload = NotTested($(".mySiteIDClass"), $(".myDateClass"));

         function NotTested(SiteIds, TestDates) { //loop through date items }
</script>

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多