簡體   English   中英

如何在敲除功能中傳遞所選下拉列表的ID

[英]how to pass id of selected dropdown in knockout function

這是我在淘汰賽中的簡單功能。 您可以在最后一行看到以下數據:ko.toJson(post)

    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: ko.toJSON(post)
    })
    .done(function (result) {
       self.posts.splice(0, 0, new Post(result));
       self.newMessage('');
   })
   .fail(function () {
       error('unable to add post');
   });
}

現在,與此同時,我想通過下拉列表選擇ID,如下所示

data: { id: $("#Locations").val() }

現在,請告訴我如何將這兩者合並為一個,以便我可以將消息以及所選的下拉列表ID發布到controller中 。這是我的controller:

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

在我的查看頁面上,這是我觸發addPost函數的單擊事件的按鈕

 <input type="button" data-url="/Wall/SavePost" value="Share" data-bind="click: addPost">

與此相關的是,發送ID的下拉列表如下所示:

 @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> 

在此視圖頁面上,我對此表示懷疑:

1>在單擊按鈕時,我正在調用addPost函數並成功綁定textarea消息。但是,現在,在下拉選擇中,我應該像這樣調用相同的addPost函數:

 @Html.DropDownList("Locations", ViewBag.NeighbourhoodId as SelectList, "Select a location", new { data_bind = "event: { change: addPost}" })

我只想保存所選下拉列表的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() }
});

關於第二個問題,您不應在用戶每次更改下拉列表的值時發布控制器。 我認為這沒有道理。 因此, 刪除 #Locations的“更改”功能:

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

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM