【问题标题】:MVC - Can I set a model attribute in the view and get the value form a script?MVC - 我可以在视图中设置模型属性并从脚本中获取值吗?
【发布时间】:2013-11-22 10:34:15
【问题描述】:

这是返回上述视图的Controller:

    public PartialViewResult Day()
    {
        Day model = new Day();
        return PartialView("_Day", model);
    }

    [HttpPost]
    public PartialViewResult Day(Day model)
    {
        return PartialView("_Day", model);
    }

在阅读this 问题后,我同时编写了 Get 和 Post 方法。请注意,我没有在 Controller 中设置模型。

那我有我的看法了:

@model Timing.Models.Day

@{
    Timing.Models.Day d = new Timing.Models.Day();
    d.UserId = "some value";
}

这段代码工作正常:当我去检索或显示时,d.UserId 我得到了正确的值。
此外,我在同一视图中有一个脚本。

<script>
    function getUserId() {
        //some code that gets a string
        return userId;
    }
</script>

而且这个脚本工作正常。
我寻找了一个解决方案,这是我能找到的最好的:

@{
    Timing.Models.Day d = new Timing.Models.Day();
    d.UserId = Page.ClientScript.RegisterStartupScript(this.GetType(), "Getuser", "getUserId()", true);
}

但它不起作用,因为 null (虽然我无法理解什么是 null)。
有没有办法解决这个问题?

对于那些询问的人,我使用脚本是因为我要设置的值是 html 元素之一(这是我的相关问题)。
谢谢!

【问题讨论】:

  • 不清楚的问题...您希望从客户端脚本更新模型的属性吗?
  • 这正是我想要得到的东西

标签: c# jquery asp.net-mvc


【解决方案1】:

在 javascript 中声明你想要的变量

@{
  var useridForjs = model.property // access model and set useridForjs 
}

在javascript中使用

<script>
function getUserId() {
    //some code that gets a string

  var myserversidevarvalue = '@useridForjs'; // here myserversidevarvalue will store value..
    return userId;
}
</script>

【讨论】:

  • 是否有可能,即,做相反的过程?我的意思是,如果在脚本函数中我写了'@Model.property' = "somevalue";(可能在文档就绪函数中),视图是否识别出具有该值的属性?
  • 但是如果你只想存储 id 然后在一些隐藏变量中执行,然后使用请求表单参数从该隐藏变量中获取数据
【解决方案2】:

让你自己轻松一点,将你的 id 注入一个隐藏的表单字段,通过 javascript 可以轻松获取。将此添加到您的视图中:

 Html.HiddenFor(model.userId)

然后像这样访问它:

 function getUserId() {
    return $('#userId').val();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多