0

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

我的 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 从开始时间(计时器值)获取。当我在 homecontroller 中获得 ddd 值时,它包含一个空值。

有任何想法吗?

4

2 回答 2

0

你的ajax调用是错误的。查看jQuery.ajax()中的文档,特别是查看Sending Data to the Server部分。

$.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);
    }
});

您已指定发出 post 请求,但您尝试将数据与 url 一起传递,省略了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保存数据的 a。结合使用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 中使用该参数。

于 2013-07-11T09:18:50.837 回答
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 方法。
于 2013-07-12T10:33:11.683 回答