【问题标题】:Pass MVC / Razor object to javascript / knockout?将 MVC / Razor 对象传递给 javascript / 淘汰赛?
【发布时间】:2013-09-22 13:47:40
【问题描述】:

在我看来,我有以下几点:

 <a data-bind="click: saveAboutMe(@Html.Raw(Json.Encode(User.Identity.Name)))">save</a>

我正在尝试将 @User.Identity.Name 传递给 js 函数,但我得到“意外令牌”。什么是实现这一目标的干净方法?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor knockout.js


    【解决方案1】:

    已编辑:

    仍然是引号。 Json.Encode 提供双引号,因此您需要将数据绑定包含在单引号中:

    <a data-bind='click: saveAboutMe(@Html.Raw(Json.Encode(User.Identity.Name)))'>save</a>
    

    【讨论】:

    • 这对我不起作用 - 我收到 js 错误“非法字符”
    • 你可以查看源代码/检查元素并将输出的 HTML 渲染到浏览器吗?
    • 输出为:save
    • 更新答案——Json.Encode 提供“,因此您需要使用 ' 来避免字符串过早终止。
    • 请注意,我使用的是单引号包装数据绑定而不是双引号。
    【解决方案2】:

    那么在这种情况下,我建议您在您的类中创建一个属性,然后将该类从控制器中扔到视图中 喜欢:-

    public ActionResult Action()
    {
       MyClass objMyClass = new MyClass();
       objMyClass.UserName = User.Identity.Name;
       return View(objMyClass);
    }
    
    public class MyClass
    {
      public string UserName { get; set; }
    }
    

    现在在视图上,您​​可以将值保存在隐藏字段中。 现在您可以在 java 脚本中的任何位置访问此隐藏字段的值。

    【讨论】:

      【解决方案3】:

      你需要使用@Html.AttributeEncode 方法:

      <a data-bind="click: saveAboutMe.bind($data, '@(Html.AttributeEncode(User.Identity.Name))')">save</a>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        • 2016-04-28
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        • 2014-10-26
        • 2023-03-14
        相关资源
        最近更新 更多