如何从JavaScript获得homecontroller的值

本文关键字:homecontroller 的值 获得 JavaScript | 更新日期: 2023-09-27 18:21:52

我的项目中有一个计时器,当我停止它时,计时器值应该保存到数据库中,但我无法将计时器值从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-get from starttime(计时器值)。当我在homecontroller中获取ddd值时,它包含一个空值。

有什么想法吗?

如何从JavaScript获得homecontroller的值

您的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]属性,以便能够区分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中使用该参数。

请尝试以下代码:

$(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. 如果您需要它的post请求,那么为什么要通过URL参数发送数据,而不是在正文中发送
  2. 如果需要"Json",则还需要相应地指定"contentType"
  3. "starttime"是div元素,要获得它的值,正确的方法是使用text()jquery方法