如何从JavaScript到家庭控制器获得价值?

时间:2013-07-11 08:24:44

标签: c# javascript asp.net-mvc

我的项目中有一个计时器,当我停止它时,计时器值应保存到数据库中,但我无法从JavaScript到homecontroller获取计时器的值。

我的JavaScript是:

<script type="text/javascript">

document.getElementById("starttime").innerHTML = ((hour<=9) ? "0"+hour : hour) + " : " + ((min<=9) ? "0" + min : min) + " : " + sec;
.
.
.
.
.
</script> 

<script type="text/javascript">
         $(document).ready(function () {
             $("#End").click(function () {
                 $.ajax({ url: '/Home/SaveAnsDetails?classs=' + ($("#txtClass").val())
                  + '&ExamDate=' + ($("#ExamDate").val())
                    + '&ddd=' + ($("#starttime").val()),<!--timer value starttime is passed to ddd-->
                     type: "Post",
                     dataType: "json",

                     success: function (message) {
                         alert(message);
                     }
                 });
             });
         });

</script>

<div id="starttime" style="font-size:large; "></div>

家庭控制器编码

    [ActionName("SaveAnsDetails")]
    public ContentResult SaveAnsDetails(ModelGridAllFeatures model, IList<VW_Grid_Answer1> ds, string ExamDate, string ddd)
    {

    }

ddd从starttime获取(计时器值)。当我在homecontroller中获得ddd值时,它包含一个空值。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您的ajax通话错误。查看jQuery.ajax()上的文档,特别是查找向服务器发送数据部分。

$.ajax({
    url:
        '/Home/SaveAnsDetails?classs=' + ($("#txtClass").val())
        + '&ExamDate=' + ($("#ExamDate").val())
        + '&ddd=' + ($("#starttime").val()),<!--timer value starttime is passed to ddd-->
    type: "Post",
    dataType: "json",

    success: function (message) {
        alert(message);
    }
});

您已指定发布帖子请求,但您尝试将数据与网址一起传递,省略data设置。这是错的。如果您使用此类发布请求,则需要指定data设置。在ajax调用中使用以下代码:

$.ajax({
    url:
        '/Home/SaveAnsDetails',
    data:
        'classs=' + ($("#txtClass").val())
        + '&ExamDate=' + ($("#ExamDate").val())
        + '&ddd=' + ($("#starttime").val()),
    type: "POST",
    dataType: "json",

    success: function (message) {
        alert(message);
    }
});

在您的控制器中,您需要指定[HttpPost]属性,以便能够区分POST请求和GET请求。

您没有将模型传递给控制器​​。而是使用传递给它的数据来实例化控制器中模型类的对象。使用POST请求,您可以访问保存数据的FormCollection。将Model.TryUpdateModel方法与Collection.ToValueProvider()方法结合使用,可将值写入模型。您的控制器看起来像这样:

[HttpPost]
public ActionResult SaveAnsDetails(FormCollection collection)
{
    var model = new ModelGridAllFeatures();
    TryUpdateModel(model, new string[]
    {
        "classs",
        "ExamDate",
        "ddd"
    }, collection.ToValueProvider());
}

您还可以将POST次请求与GET次请求合并。您可以将另一个参数传递给控制器​​并编辑您的ajax请求,以相应地在请求URL中使用该参数。

答案 1 :(得分:0)

请尝试以下代码:

$(document).ready(function () {
         $("#End").click(function () {
             $.ajax({ url: '/Home/SaveAnsDetails',
              data: {'classs': $("#txtClass").val(),
                     'ExamDate': $("#ExamDate").val(),
                     'ddd':$("#starttime").text()
                    },
              type: "Post",
              dataType: "json",
              contentType:'application/json',
              success: function (message) {
                     alert(message);
                 }
             });
         });
     });

的变化:

  1. 如果您要求的帖子请求那么为什么要通过URL参数发送数据,而是将其发送到正文中。
  2. 如果您需要'Json',那么您还需要相应地指定'contentType'。
  3. 'starttime'是div元素,正确的方法是使用text()jquery方法得到它的值。
相关问题