【问题标题】:How to create a global razor variable to keep count of length in array如何创建全局剃刀变量以保持数组中的长度计数
【发布时间】:2016-05-19 20:27:19
【问题描述】:

如何在 razor 中创建一个跟踪 SuccessCriteria 计数的全局变量?单击insert-success-criteria 按钮时,我正在为SuccessCriteria 动态创建表单输入,并删除单击remove-success-criteria 按钮时创建的最后一个表单输入。因此,我需要像model => model.SuccessCriteria[count] 这样的东西,count 在添加输入时递增,在删除输入时递减。

我在我的函数上方尝试了@{int count = 1; },但这会将其存储在本地,我无法在我的函数中访问它

另外,有没有办法在我删除数组元素时将其设置为 null? 我试过 @{SuccessCriteria[count] = null;} 但这不起作用。

型号:

    public int SuccessCriteriaId { get; set; }
    [Required]
    [Display(Name = "Success Criteria/ROI:")]
    public virtual List<String> SuccessCriteria { get; set; }

查看:

<table>
<tr class="form-group col-xs-12">
    <td class="form-label col-xs-4">
        @Html.LabelFor(model => model.SuccessCriteria, htmlAttributes: new { @class = "control-label col-xs-12" })
    </td>
    <td class="form-input col-xs-8">
        <ul>
            <li class="base-success-criteria">
                @Html.EditorFor(model => model.SuccessCriteria[0], new { htmlAttributes = new { @class = "form-control col-xs-12" } })
                @Html.ValidationMessageFor(model => model.SuccessCriteria, "", new { @class = "text-danger" })
            </li>
       </ul>
   </td>
</tr>
<tr class="form-group col-xs-12">
    <td class="form-label col-xs-4"></td>
        <td class="form-input col-xs-8">
            <button class="btn btn-primary btn-xs" id="insert-success-criteria"><i class="glyphicon glyphicon-triangle-bottom"></i></button> Insert another measurement
         </td>
 </tr>
 </table>

脚本:

<script type="text/javascript">
@{int counter = ViewBag.SucCritCounter; }
jQuery(function ($) {
    $('#insert-success-criteria').on("click", function (e) {
        $(this).closest('tr').prev('tr').find('.remove-success-criteria').remove();
        $(this).closest('tr').prev('tr').find('ul')
            .append(
                '<li>' +
                '@Html.EditorFor(model => model.SuccessCriteria[counter], new { htmlAttributes = new { @class = "form-control col-xs-12" } })' +
                '<button class="btn btn-danger btn-xs remove-success-criteria"><i class="glyphicon glyphicon-remove"></i></button>' +
                '</li>');
            @{counter++; }
    });
});

jQuery(function($) {
    $('ul').on("click", "button.remove-success-criteria", function(e) {
        if (!$(this).closest('li').prev('li').hasClass('base-success-criteria')) {
            $(this).closest('li').prev('li')
                .append('<button class="btn btn-danger btn-xs remove-success-criteria"><i class="glyphicon glyphicon-remove"></i></button>');
        }
             @{counter--; }
        $(this).parent().remove();
    });
});

</sript>

【问题讨论】:

  • 从代码中根本不清楚为什么需要“全局变量”,但@{ int counter = ViewBag.SucCritCounter; } 正在为服务器端变量赋值(当页面发送到看法)。如果要更新服务器上的某些静态计数器,则需要使用 ajax 将值发布到更新它的控制器方法。另一方面,如果您可以使用客户端计数器,那么它的 var counter = '@ViewBag.SucCritCounter'; inside the scipt, which your can then increment using counter++;`

标签: c# jquery asp.net-mvc razor


【解决方案1】:

Web.config添加密钥

<appSettings>
    <add key="MY_GLOBAL_VALUE" value="1" />
</appSettings>

并通过这种方式获得

System.Configuration.ConfigurationManager.AppSettings["MY_GLOBAL_VALUE"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多