2013-07-11 101 views
0

我在我的项目中有一个计时器,当我停止计时器值应该被保存到数据库,但我无法从JavaScript到homecontroller获取定时器的值。如何从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> 

HomeController的编码是

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

    } 

DDD从开始时间(定时器值)获得。当我在homecontroller中获得ddd值时,它包含一个空值。

任何想法?

+0

我不确定此参数是否为“ModelGridAllFeatures模型”,但您是否相应地为Examdate获取了值? –

回答

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

已指定,使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]属性,要能区分一个GET请求POST请求。

您不会将模型传递给您的控制器。而是使用传递给它的数据在控制器中实例化模型类的对象。有了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()); 
} 

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

+0

仍然我无法获得计时器(DDD)的价值...我想在

我显示计时器值的一些问题..+'&ddd ='+($(“#starttime”).val())没有获得价值..任何想法... –

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参数发送数据,而不是身体发送的POST请求。
  2. 如果您需要'Json',那么您还需要相应地指定'contentType'。
  3. 'starttime'是div元素,并得到它的值正确的方法是使用text()jquery方法。