如何在JavaScript设置数据时将数据从View传递到Controller?

时间:2015-03-03 04:28:31

标签: asp.net asp.net-mvc

我有一个跨度,其值是通过knockout.js设置的:

<span id="total" data-bind="text: total"></span>

只要滑块更改值,就会设置此项。所有这些都在BeginForm中。现在我的问题是如何将这个(通过模型绑定)传递给控制器​​。如何在提交模型中获取此值,以便在调用Action时绑定它?

修改

好的,让我重新解释一下我的问题。我有一个强类型的cshtml文件到模型。现在,此模型的属性(Total)绑定到隐藏字段以作为基值:

@Html.HiddenFor(model => model.Total, new { id = "base-total" })

现在在这个cshtml中,有一个滑块,它根据滑块和基本总数将span的值更改为计算。

<span id="total" data-bind="text: total"></span>

我需要通过js更改,因为每次移动滑块时都无法重新加载页面。所以现在我的问题是显示被更改但实际模型值没有,因此当我提交时,模型仍然具有基本总值。

如何将通过js更改的值传递给模型?如果这不是正确的方法,你能建议我尝试一下吗?

1 个答案:

答案 0 :(得分:0)

您可以这样做,即在提交表单时手动将JS模型发送到服务器。

例如:

<form data-bind="submit: doSomething">
    ... form contents go here ...
    <span id="total" data-bind="text: total"></span>
    <button type="submit">Submit</button>
</form>

<script type="text/javascript">
    var viewModel = {
        doSomething : function(formElement) {
            // ... now do something

            var data = JSON.stringify(
            {
                total: self.total // for example.
            }); // prepare request data

            $.post("/api/your-service", data, function(response) // sends 'post' request
            {
                // on success callback
                self.responseJSON(response);
            })
        }
    };
</script>