如何在MVC视图中将变量值传递给JScript?

时间:2012-10-19 12:13:24

标签: javascript asp.net-mvc-3

我正在开发MVC应用程序,其中我想将Variable传递给该视图本身的JScript。 怎么做?

我想将AccessMode的值发送到Javascript 我已声明了Variable但不知道如何在JScript中使用它。

<script src="@Url.Content("~/Scripts/jquery-1.8.0.min.js")" type="text/javascript"></script>

@model CRMEntities.Settings




@{
    ViewBag.Title = "CustomSettings3";
    //Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>CustomSettings3</h2>
<!DOCTYPE html>

<html>
<head>
    <title>CustomSettings3</title>
</head>
<body>

       @{string AccessMode; }
     @{string Ratings; }


       <div class="editor-label">
            @Html.LabelFor(model => model.AccessMode)
        </div>
        <div class="editor-field">
           @* @Html.EditorFor(model => model.AccessMode)*@
            @Html.DropDownList("AccessMode")
            @Html.ValidationMessageFor(model => model.AccessMode)
             //Assigning value.
            AccessMode = model.AccessMode
        </div>

         <div class="editor-field">

         @Html.DropDownList("RatingsCount")
        @Html.ValidationMessageFor(model => model.RatingsCount)
         @{
             Ratings = Html.DropDownList("RatingsCount");
        }
    </div>


        <p>
            <input type="button" value="Save" class="SaveSettings"/>       

        </p>

</body>
</html>




  <script type="text/javascript">

$(document).ready( function(){

    $('.SaveSettings').click(function ()
    {


           $.ajax
            ({

            type: 'post',
            url: '@Url.Content("~/Settings/SaveBasicSettings")',
            dataType: 'json',
            data:
            { 'AccessMode': "@AccessMode" },
            success: function (data) 
            {


            }

            });


       });

  });

</script>

enter image description here

2 个答案:

答案 0 :(得分:3)

鉴于AccessMode只是视图中定义的字符串变量,并且您的JS嵌入在同一视图中,您可以通过标准方式将变量的值简单地写入JS:

{ 'AccessMode': "@AccessMode" },

一旦将JS移动到单独的文件(如果您选择这样做),另一种方法就是将AccessModel值存储为编辑器字段中的数据属性。

这样你的javascript就可以像在页面上的任何其他属性一样轻松地选择它。

<强>更新

您分配价值的方式还需要调整:

@{
AccessMode = Model.AccessMode
}

答案 1 :(得分:0)

如果您的值设置正确,则可以将其存储在隐藏变量中并在javascript中读取

在视图中

<div class="editor-label">
            @Html.LabelFor(model => model.AccessMode)
        </div>
        <div class="editor-field">
           @* @Html.EditorFor(model => model.AccessMode)*@
            @Html.DropDownList("AccessMode")
            @Html.ValidationMessageFor(model => model.AccessMode)
             //Assigning value.
            AccessMode = model.AccessMode

           @Html.Hidden("modelValue", AccessMode)  //set value in hidden variable 
        </div>

在javaScript中

<script type="text/javascript">
    $(document).ready(function () {

        $('.SaveSettings').click(function () {
            var modelValue = $("#modelValue").val();
            $.ajax
            ({

                type: 'post',
                url: '@Url.Content("~/Settings/SaveBasicSettings")',
                dataType: 'json',
                data: { 'AccessMode': modelValue },
                success: function (data) {


                }

            });


        });

    });

</script>

注意:检查是否在隐藏变量中的model.AccessMode中正确设置了值。