在Mvc中向控制器发起简单的Ajax调用

4
我是mvc的新手,我试图对我的控制器进行简单的Ajax调用,以便在我的创建视图中使用日期和时间选择器。
当我在IE中使用调试时,会出现此错误消息,但如果我设置断点,则看起来我获得了正确的数据。
“参数字典包含非可空类型'System.Int32'的参数'Lokal'的空条目,用于VLVision.Controllers.SammantradesAdminController中的方法'System.Web.Mvc.ActionResult CreateEvent(System.String、System.String、System.String、Int32)。可选参数必须是引用类型,可空类型或声明为可选参数。参数名称:parameters” HTML
script type="text/javascript">

        function createSammantrade() {
        var sammantrade = document.getElementById('sammantrade').value;
        var date = document.getElementById('datepicker').value;
        var startTime = date + ' ' + document.getElementById('StartTimepicker').value;
        var endTime = date + ' ' + document.getElementById('EndTimepicker').value;
        var lokal = document.getElementById('lokal').value;

        $.ajax({
            url: "@Url.Action("CreateEvent", "SammantradesAdmin")",
            data: { createSammantrade: sammantrade, createStartTime: startTime, createEndTime: endTime, createLokal: lokal },
            type: "POST",
            error: function () {
                alert("An error occurred.");
            },
            success: function (data) {

                $("#clanderDiv").html(data);
                $("#setEventResponse").html("Händelse sparad");
            //    $(".blank").tooltip();
            }
        });
    }

控制器

public ActionResult Create()
{
       ViewBag.lID = new SelectList(db.Lokal, "lID", "lLokal");
       return View();
}

[HttpPost]
public ActionResult CreateEvent(string createSammantrade, string createStartTime, string createEndTime, int Lokal)
        {
            Sammantrade sammantrade = new Sammantrade();
            sammantrade.sSammantrade = createSammantrade;
            sammantrade.sStartTid = Convert.ToDateTime(createStartTime);
            sammantrade.sSlutTid = Convert.ToDateTime(createEndTime);
            sammantrade.lID = Lokal;


            if (ModelState.IsValid)
            {
                db.Sammantrade.Add(sammantrade);
                db.SaveChanges();
                return RedirectToAction("Index");

            }
                ViewBag.lID = new SelectList(db.Lokal, "lID", "lLokal", sammantrade.lID);
                return View(sammantrade);

}
3个回答

3

由于JS和C#中参数名称不同,因此无法绑定:

data: { createSammantrade: sammantrade, createStartTime: startTime, createEndTime: endTime, createLokal: lokal }

public ActionResult CreateEvent(string createSammantrade, string createStartTime, string createEndTime, int Lokal)

要么在JS代码中将createLokal改为lokal,要么在C#代码中将它们互换(或者将一个名称绑定到另一个名称上)。


2

您在json中的参数名称与c#操作不同,这两个应该匹配。更改其中一个:

要么将createLokal : lokal更改为Lokal:lokal,要么在您的操作中将参数名称更改为createLokal


0

谢谢,一开始它没有起作用。但是当我调试它时,我发现来自lokal的结果是一个字符串,我将其更改为字符串,然后将其转换回int。

现在我有一些其他问题,但我认为我可以解决剩下的问题。

对于我的糟糕英语感到抱歉,但我希望你能理解我的意思。

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接