Javascript 如何在淘汰功能中传递所选下拉列表的id

Javascript 如何在淘汰功能中传递所选下拉列表的id,javascript,jquery,asp.net-mvc,knockout.js,Javascript,Jquery,Asp.net Mvc,Knockout.js,这是我在knockout中的简单函数。 在最后一行你可以看到,data:ko.toJson(post) 现在,除了这个,我想传递下拉选择id,类似这样的东西 data: { id: $("#Locations").val() } 现在,请告诉我如何将这两个组合成一个,以便我可以将消息与所选下拉id一起发布到控制器中。。这是我的控制器: public JsonResult PostPost(Post post, int? id) { post.PostedBy =

这是我在knockout中的简单函数。 在最后一行你可以看到,data:ko.toJson(post)

现在,除了这个,我想传递下拉选择id,类似这样的东西

data: { id: $("#Locations").val() }
现在,请告诉我如何将这两个组合成一个,以便我可以将消息与所选下拉id一起发布到控制器中。。这是我的控制器:

   public JsonResult PostPost(Post post, int? id)
    {
        post.PostedBy = User.Identity.GetUserId<int>();
        post.NeighbourhoodId = id;        
            db.Posts.Add(post);
            db.SaveChanges();
            var usr = db.Users.FirstOrDefault(x => x.Id == post.PostedBy);
            var ret = new
            {
                Message = post.Message,
                PostedBy = post.PostedBy,
                NeighbourhoodId = post.NeighbourhoodId
            };
        return Json( ret,JsonRequestBehavior.AllowGet);   
    }

我只想保存所选下拉列表的id,以便在输入类型按钮上发送到控制器,并在文本区域中单击消息。我删除了一些代码以缩短问题的长度。请帮帮我

这将解决您的第一个问题:

self.addPost = function () {
    var post = new Post();
    post.Message(self.newMessage());
    return $.ajax({
        url: postApiUrl,
        dataType: "json",
        contentType: "application/json",
        cache: false,
        type: 'POST',
        data: { post: ko.toJSON(post), id: $("#Locations").val() }
});
关于第二个问题,您不应该在用户每次更改dropdownlist的值时发布控制器。我认为我没有道理。因此,删除
#位置的“更改”功能

 $("#Locations").change(function () {
    var locationSelected = $("#Locations").val();
    var url = '@Url.Action("PostPost", "Post")';
    $.post(url, { id: locationSelected }, function (data) {
    });
 });

希望有帮助

感谢您的回复,但如果我在textarea中写入时仍然存在问题,并且一旦我选择下拉菜单,它就会击中控制器,并且id被保存到数据库中,消息列中为null。我希望两者都被保存。问题很明显,因为我没有按下输入按钮,所以post参数当时为null。正如我所说的,删除“更改功能”如你所说,我已经完成了$(“#btnShare”)。点击(函数(){你说“一旦我选择了下拉菜单,它就会击中控制器”-这不应该发生。只有提交按钮应该发布你的表单数据:{post:ko.toJSON(post),id:$(“#Locations”).val()我想问题在于这行,若我使用这个,那个么消息是空的,若我使用原始的那个么id被保存为空@Fabio Luz
 @Html.DropDownList("Locations", ViewBag.NeighbourhoodId as SelectList, "Select a location", )
          <script type="text/javascript">
             $(document).ready(function () {
              $("#Locations").change(function ()
                  {
                    var locationSelected = $("#Locations").val();
                    var url = '@Url.Action("PostPost", "Post")';
                    $.post(url, { id: locationSelected },
                   function (data) 
                            {
                               });
                            });
                          });
      </script> 
 @Html.DropDownList("Locations", ViewBag.NeighbourhoodId as SelectList, "Select a location", new { data_bind = "event: { change: addPost}" })
self.addPost = function () {
    var post = new Post();
    post.Message(self.newMessage());
    return $.ajax({
        url: postApiUrl,
        dataType: "json",
        contentType: "application/json",
        cache: false,
        type: 'POST',
        data: { post: ko.toJSON(post), id: $("#Locations").val() }
});
 $("#Locations").change(function () {
    var locationSelected = $("#Locations").val();
    var url = '@Url.Action("PostPost", "Post")';
    $.post(url, { id: locationSelected }, function (data) {
    });
 });