在Javascript中访问MVC模型属性

在Javascript中访问MVC模型属性,javascript,asp.net-mvc,razor,Javascript,Asp.net Mvc,Razor,我在MVC项目中有一个如下视图页面 @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.ControlLabel) </td> <td> @Html.DisplayFor(mod

我在MVC项目中有一个如下视图页面

@foreach (var item in Model)
    {
            <tr>
            <td>
                @Html.DisplayFor(modelItem => item.ControlLabel)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ControlType)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ControlDatatype)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.MasterModule.ModuleName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Form.FormName)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.ControlID }) |
            @Html.ActionLink("Details", "Details", new { id = item.ControlID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.ControlID })
            </td>
        </tr>
    }
@foreach(模型中的变量项)
{
@DisplayFor(modelItem=>item.ControlLabel)
@DisplayFor(modelItem=>item.ControlType)
@DisplayFor(modelItem=>item.ControlDatatype)
@DisplayFor(modelItem=>item.MasterModule.ModuleName)
@DisplayFor(modelItem=>item.Form.FormName)
@ActionLink(“编辑”,“编辑”,新的{id=item.ControlID})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.ControlID})|
@ActionLink(“删除”,“删除”,新的{id=item.ControlID})
}

我想在javascript函数中访问ControlType,可以这样做吗?如果是,请引导我

当然,通过渲染。您可以在客户端javascript中呈现任何内容,如:

<script>
   var controlType = "@(Model[0].ControlType)";
</script>

var controlType=“@(模型[0].controlType)”;
或者说:

<a href="#" onclick="doSomethingFIrst(@(Model[0].ControlType))">

诸如此类;将0替换为模型集合中所需的索引。这很好,但您必须小心,因为您在这里进行渲染,所以它必须是客户端javascript(基本类型)或序列化数据(使用JSON.NET或类似的东西)可以使用的东西。

@foreach(模型中的var项)
{
@DisplayFor(modelItem=>item.ControlLabel)
@DisplayFor(modelItem=>item.ControlType)
@DisplayFor(modelItem=>item.ControlDatatype)
@DisplayFor(modelItem=>item.MasterModule.ModuleName)
@DisplayFor(modelItem=>item.Form.FormName)
@ActionLink(“编辑”,“编辑”,新的{id=item.ControlID})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.ControlID})|
@ActionLink(“删除”,“删除”,新的{id=item.ControlID})
如果(item.ControlType==“blah”)
{
警报(“a”);
}
}

渲染输出的外观如何?F12,查看检查员。对不起,我不明白。您能解释一下吗?好的,同样,项目在您的for循环中;这个代码在for循环中吗?如果没有,则需要执行模型[0]。上面添加的COntrolTypeC#示例。你是在使用它还是VB?如果我在应用更新代码,他们会说不能对“system.collections.generic.Ienumerable”类型的表达式应用索引。你需要将你的模型更改为类,或者将其设置为列表。我该如何实现你能告诉我你应该将HTML和JS代码分开。如果这样做,您可以定义一个JS变量,比如@BrianMains,或者在表单中定义一个数据属性。请记住,在定义JS变量时,应避免定义全局变量,而应在命名空间中定义它们。但brainsmain answer不适用于我@FranciscoGoldenstein。。。userDies是否给出了错误的解决方法?@userDies答案没有错,但我不喜欢在HTML中创建条件JS块。HTML和JS应该分开。您可以创建一个JS文件并在那里编写所有JS代码。您可以在HTML的form标记中设置数据属性,或者为ControlType使用隐藏字段。始终将HTML和JS分开,并考虑到您不能在JS文件上使用Razor语法。Brian建议您在HTML文件中创建一个JS变量。这是一种常见的做法,尽管我不喜欢。我更喜欢在HTML中定义一个隐藏字段或设置一个数据属性,并从JS中使用它。
@foreach (var item in Model)
    {

        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.ControlLabel)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ControlType)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ControlDatatype)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.MasterModule.ModuleName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Form.FormName)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id = item.ControlID }) |
            @Html.ActionLink("Details", "Details", new { id = item.ControlID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.ControlID })
            </td>
        </tr>

        if (item.ControlType == "blah")
        {
        <script type="text/javascript">

          alert("a");

        </script>

        }
    }