如何将C#与javascript混合以更改html?

时间:2015-04-20 11:29:42

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

我正在尝试更改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){

2 个答案:

答案 0 :(得分:4)

您无法正确转发"(语录)。这一行:

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#中,因此无法在selectValue比较中评估JavaScript变量==

答案 1 :(得分:0)

尝试使用剃须刀<text>伪元素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;

}