【问题标题】:How to mix C# with javascript for changing html?如何将 C# 与 javascript 混合以更改 html?
【发布时间】:2015-04-20 11:29:42
【问题描述】:

我正在尝试更改 html DOM 元素。使用来自 asp.net 的数据。来自 CSharp 的所有数据都在 ViewBags 中。 ViewBag.Kenmerken 是一个字符串列表,ViewBag.Definities 是一个定义对象列表,其中包含变量“variabel”和变量“kenmerk”。我有以下代码:

@{
    ViewBag.Title = "KenmerkSelectie";
}


<script type="text/javascript">
    function Kenmerk1() {
        var myselect = document.getElementById("kenmerk1");
        var selectValue = myselect.options[myselect.selectedIndex].value;
        var newOptions= "";

        @foreach (var def in ViewBag.Definities) {

            //@def.kenmerk is C# && selectValue is JS;
            if(@def.Kenmerk == selectValue){
                newOpstions= newOptions+ "<option value=\"@def.Variabel\"> @def.Variabel </option>";
            }
        }

        document.getElementById("var1").innerHTML = newOptions;
    }

    <div class="kenmerk">
        <h3>Kenmerk 1</h3>
                <select id="kenmerk1" onchange="Kenmerk1()">

                    @foreach (var item in ViewBag.Kenmerken)
                {
                    <option value="@item">
                            @item
                        </option>
                }


                </select>


                <select id="var1" multiple="multiple">
                    <!-- add option from js function -->
                </select>
            </div>

编辑:

描述:编译资源时出错 需要服务此请求。请查看以下具体 错误详细信息并适当地修改您的源代码。

编译器错误消息:CS0103:名称“selectValue”不存在 在当前情况下

源错误:if(@def.Kenmerk == selectValue){

【问题讨论】:

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


    【解决方案1】:

    您没有正确地转义您的"(引用)。这一行:

    newOptions = newOptions + "<option value="@def.Variabel"> @def.Variabel </option>";
    

    应该是这样的:

    newOptions = newOptions + @"<option value=""@def.Variabel""> @def.Variabel</option>";
    

    不过,对于 ASP.NET MVC 设计原则,我建议不要使用 ViewBag。改为使用模型来传递数据。 http://tech.trailmax.info/2013/12/asp-net-mvc-viewbag-is-bad/

    编辑: 此外,您似乎应该将数据转换为 JSON,以便您可以在 JavaScript 端比较您的值。由于 def.Kenmerk 存在于 C# 中,因此无法在 == 比较中评估 JavaScript 变量 selectValue

    【讨论】:

    • 谢谢你!我已经编辑了我的错误消息,因为我现在使用反斜杠来转义我的错误消息是 selectValue。
    【解决方案2】:

    尝试使用剃须刀&lt;text&gt;伪元素see also here

    function Kenmerk1() {
        var myselect = document.getElementById("kenmerk1");
        var selectValue = myselect.options[myselect.selectedIndex].value;
        var newOptionsInHtmlStyle = "";
    
        @foreach (var def in ViewBag.Definities) {
            <text>
            //@def.kenmerk is C# && selectValue is JS;
            if(@(def.Kenmerk) == selectValue){
                newOptions = newOptions + '<option value="@(def.Variabel)"> @(def.Variabel) </option>';
            }
            </text>
        }
    
        document.getElementById("var1").innerHTML = newOptions;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      相关资源
      最近更新 更多