Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从javascript变量向razor变量传递值?_Javascript_C#_Razor - Fatal编程技术网

如何从javascript变量向razor变量传递值?

如何从javascript变量向razor变量传递值?,javascript,c#,razor,Javascript,C#,Razor,如何将值从javascript变量传递给razor变量,是否可能是asp.net mvc razor视图引擎 @{ int a = 0; } <script> var b = ... @a = b; </script> @{ int a=0; } 变量b=。。。 @a=b; 你不能。原因是他们不“生活”在同一时间。 Razor变量是“服务器端变量”,页面发送到“客户端”后,它们就不存在了 当服务器收到视图请求时,它只使用HTML、CSS和Jav

如何将值从javascript变量传递给razor变量,是否可能是asp.net mvc razor视图引擎

@{
    int a = 0;
}

<script>
    var b = ...
    @a = b;
</script>
@{
int a=0;
}
变量b=。。。
@a=b;

你不能。原因是他们不“生活”在同一时间。 Razor变量是“服务器端变量”,页面发送到“客户端”后,它们就不存在了

当服务器收到视图请求时,它只使用HTML、CSS和Javascript代码创建视图。没有留下C#代码,所有代码都被“翻译”成客户端语言

当视图仍在服务器上时,Javascript代码确实存在,但它没有任何意义,将仅由浏览器执行(再次由客户端执行)

这就是为什么您可以使用Razor变量来更改HTML和Javascript,但不能反之亦然。试着看看你的页面源代码(在大多数浏览器中是CTRL+U),那里不会有C代码的迹象

简言之:

  • 服务器收到一个请求

  • 服务器创建或“获取”视图,然后计算并将视图中嵌入的所有C#代码转换为CSS、Javascript和HTML

  • 服务器将视图的客户端版本返回到浏览器,作为对请求的响应。(此时不再有C#)

  • 浏览器呈现页面并执行所有Javascript

     $('#stringName').replaceWith(localStorage.getItem("itemName"));
    

  • 但如果使用一个变量来代替@html.Hidden字段中的变量,这是可能的。 如本例所示

    @Html.Hidden("myVar", 0);
    
    设置每个脚本的字段:

    <script>
    function setMyValue(value) {
         $('#myVar').val(value);       
    }
    </script>
    
    
    函数setMyValue(值){
    $('#myVar').val(值);
    }
    

    我希望我至少能提供不小的解决方法。

    我知道这个问题在不久前已经讨论过了,但如果有人会再次遇到这个问题,我的解决方案如下:

    在*.cshtml视图文件中:

    <script>
    var data = JsFunction("@Html.Raw(Model.Path)");
    $(function () {
        $("#btn").click(function () {
            var model = { Id: '@Html.Raw(Model.Id)', Data: data }
            $.ajax({
                type: "POST",
                url: "/Controller/Action",
                data: model,
                datatype: "html",
                success: function() {
                    console.log('Success');
                }
            });
        });
    });
    </script>
    
    
    var data=JsFunction(@Html.Raw(Model.Path));
    $(函数(){
    $(“#btn”)。单击(函数(){
    var model={Id:'@Html.Raw(model.Id)',Data:Data}
    $.ajax({
    类型:“POST”,
    url:“/Controller/Action”,
    数据:模型,
    数据类型:“html”,
    成功:函数(){
    console.log('Success');
    }
    });
    });
    });
    
    JavaScript变量模型是我需要传递给Razor ViewModel的东西。 这可以通过ajax请求完成。 您只需要在操作中使用合适的参数,该参数与JavaScript中创建的Json对象相匹配

    希望它能帮助别人

    步骤:1你的Html, 首先使用javascript将值存储在localstorage中,然后添加如下行,这是在html中显示值的地方,我的示例基于boostrap:

    <label for="stringName" class="cols-sm-2 control-
    label">@Html.Hidden("stringName", "")</label>
    

    Razor View服务器端变量可以使用@ 虽然
    JavaScript客户端变量可以使用@:

    读取到Razor视图好的,所以这个问题很老了。。。但我想做一些类似的事情,我找到了一个适合我的解决方案。也许它可以帮助其他人

    我有一个
    列表
    ,我用它来填充下拉列表。我想将所选内容放入我正在表单中创建的
    Question
    对象的
    QuestionType
    属性中。我正在使用
    Knockout.js
    进行选择绑定。这将在用户选择对象时,将
    self.QuestionType
    knockout observable属性设置为
    QuestionType
    对象

    <select class="form-control form-control-sm"
        data-bind="options: QuestionTypes, optionsText: 'QuestionTypeText', value: QuestionType, optionsCaption: 'Choose...'">
    </select>
    
    在observable的订阅中,我将隐藏字段设置为对象的
    JSON.stringify
    -ed版本

    self.QuestionType.subscribe(function(newValue) {
        if (newValue !== null && newValue !== undefined) {                       
            document.getElementById('NewQuestion_QuestionTypeJson').value = JSON.stringify(newValue);
        }
    });
    
    Question
    对象中,我有一个名为
    QuestionTypeJson
    的字段,当用户选择问题类型时,该字段将被填充。我使用此字段获取
    Question
    对象中的
    QuestionType
    ,如下所示:

    public string QuestionTypeJson { get; set; }
    
    private QuestionType _questionType = new QuestionType();
    public QuestionType QuestionType
    {
        get => string.IsNullOrEmpty(QuestionTypeJson) ? _questionType : JsonConvert.DeserializeObject<QuestionType>(QuestionTypeJson);
        set => _questionType = value;
    }
    
    公共字符串QuestionTypeJson{get;set;}
    private QuestionType_QuestionType=新的QuestionType();
    公共提问类型提问类型
    {
    get=>string.IsNullOrEmpty(QuestionTypeJson)?\u questionType:JsonConvert.DeserializeObject(QuestionTypeJson);
    set=>\u questionType=value;
    }
    
    因此,如果
    QuestionTypeJson
    字段包含某个内容,它将反序列化该内容并将其用于
    QuestionType
    ,否则它将只使用支持字段中的内容


    我基本上是在不使用
    Razor
    Ajax
    调用的情况下将一个JavaScript对象“传递”到我的模型中。您可能不需要使用
    Knockout.js就可以做类似的事情,但这正是我所使用的,所以

    以下是我的有效解决方案:

    在我的表格中,我使用:

    @using (Html.BeginForm("RegisterOrder", "Account", FormMethod.Post, new { @class = "form", role = "form" }))
      {
    
       @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
    
       @Html.HiddenFor(m => m.quantity, new { id = "quantity", Value = 0 })
    
      }
    
    在my file.js中,我从get请求中获取数量,并按如下方式将变量传递给表单:

        $http({
            method: 'Get',
            url: "https://xxxxxxx.azurewebsites.net/api/quantity/" + usr
        })
            .success(function (data){
    
                setQuantity(data.number);
    
                function setQuantity(number) {
                    $('#quantity').val(number);
                }
    
            });
    
    是的,你可以

    Asp.net MVC razor

    我有两个输入

     <input id="TXTCount" type="number" readonly="readonly" class="form-control text-center text-bold" step="1" min="0" max="10000" value="1" inputmode="numeric" />
    
     <input id="TXTTOTal" type="number" readonly="readonly" class="form-control text-center text-bold" step="1" min="0" max="10000" value="1" inputmode="numeric" />
    
    和WhatsApp链接

     <a class="btn btn-success" id="WatsSendApi" href="https://api.whatsapp.com/send?phone=0000&text=@WatsMSG">
        <b class="text-black" style="font-size:small"> whatsapp </b><i class="fa fa-whatsapp" style="color:white"></i> </a>
    
    
    
    在jQuery中

     <script>
                                            $("#WatsSendApi").click(function () {
                                                var StringMSG;
                                                StringMSG=("Ineed : ");
                                                StringMSG += (" Item Name : ");
                                                StringMSG +='@item.ITName' ;
                                                StringMSG += (" Count: ");
                                                StringMSG += $('#TXTCount').val();
                                                StringMSG += (" Price: ");
                                                StringMSG += '@item.ITPrice';
                                                StringMSG += (" Total: ");
                                                StringMSG += $('#TXTTOTal').val();
                                                alert(StringMSG);
                                                this.href = this.href.replace("xxx", StringMSG);
                                            });
                                        </script>
    
    
    $(“#WatsSendApi”)。单击(函数(){
    var-StringMSG;
    StringMSG=(“Ineed:”);
    StringMSG+=(“项目名称:”);
    StringMSG+='@item.ITName';
    StringMSG+=(“计数:”);
    StringMSG+=$('#TXTCount').val();
    StringMSG+=(“价格:”);
    StringMSG+='@item.ITPrice';
    StringMSG+=(“总计:”);
    StringMSG+=$('#TXTTOTal').val();
    警报(StringMSG);
    this.href=this.href.replace(“xxx”,StringMSG);
    });
    
    我正在通过脚本v
     <a class="btn btn-success" id="WatsSendApi" href="https://api.whatsapp.com/send?phone=0000&text=@WatsMSG">
        <b class="text-black" style="font-size:small"> whatsapp </b><i class="fa fa-whatsapp" style="color:white"></i> </a>
    
     <script>
                                            $("#WatsSendApi").click(function () {
                                                var StringMSG;
                                                StringMSG=("Ineed : ");
                                                StringMSG += (" Item Name : ");
                                                StringMSG +='@item.ITName' ;
                                                StringMSG += (" Count: ");
                                                StringMSG += $('#TXTCount').val();
                                                StringMSG += (" Price: ");
                                                StringMSG += '@item.ITPrice';
                                                StringMSG += (" Total: ");
                                                StringMSG += $('#TXTTOTal').val();
                                                alert(StringMSG);
                                                this.href = this.href.replace("xxx", StringMSG);
                                            });
                                        </script>