2017-03-25 16 views
0

javascript関数onclickを呼び出す削除ボタンがあります。 関数の機能が起動し、IDを取得してアラートに表示され、使用を試みます。window.location.href = "/ Home/DeletePhoto/photoId =" + id; HomeControllerでActionResultを呼び出す。モーダルポップアップでwindow.location.hrefを取得してActionResultを呼び出そうとしています。 MVC + Javascript

ボタン:

<button class="title" id="btnDelete" onclick="fDoTheDelete();">Delete</button> 

ビューの下部にあるjavascript関数:私はCtrl + javascriptのコードで以下のURLをクリックした場合、それが実行

function fDoTheDelete() 
    { 
     alert("in the delete function: " + document.getElementById('h3Title').innerHTML); 

     var id = document.getElementById('h3Title').innerHTML; 

     window.location.href = "http://localhost:50061/Home/DeletePhoto/photoId=" + id; 
    } 

(必要なActionResult)

window.location.href = "http://localhost:50061/Home/DeletePhoto/photoId=" + id; 

ここにActionResultがあります。私は写真を削除したいと思うし、それは記録され、削除されていない写真を表示するホーム/インデックスにリダイレクトする。ボタンのクリックで

public ActionResult DeletePhoto(int photoId) 
     { 
     //GET FILENAME FROM ID 
     string photoName = (from p in db.Photos 
         where p.PhotoId == photoId 
         select p.Description).FirstOrDefault(); 

     //DELETE FILE 

     string fullPath = "/GalleryImages /" + photoName; 

     if (System.IO.File.Exists(fullPath)) 
      { 
      System.IO.File.Delete(fullPath); 
      } 

     //DELETE RECORD OF PHOTO 

     Photo photo = db.Photos.Find(photoId); 
     db.Photos.Remove(photo); 
     db.SaveChanges(); 


     return RedirectToAction("Index"); 

     } 

、アラートは、私はjavascript関数内だということを示し、idが渡されましたが、写真モーダルウィンドウがちょうどまだ存在している画像のサムネイルを示す同じ指数を閉じて表示されます。

EDIT: 私は設定が非常に簡単だったが、それは難しいサムネイル/インデックス表示とモーダルライトボックスのポップアップとの間の追加のものを渡すために作られたThis image galleryを使用していた情報を編集して追加することが戻ってきました。そのため、私はActionResultへの簡単な呼び出しで大きな問題を抱えています。ハッキングするのが難しいjs/jquery/blueimpコードがたくさんあります。 私を助けようと努力してくれた皆様に感謝し、他の誰かがイメージギャラリーを使用してもらいたいと願っています。

+0

'h3Title'要素に空白がありますか?それを削除するには 'document.getElementById( 'h3Title')。innerHTML.trim()'を使用してください。 – Barmar

+0

クライアントコードとサーバーコードを混在させることは悪いです。たとえば、js関数を呼び出してページの場所を変更することが強制されますが、サーバーも新しいページを強制するので、混合技術は非常に悪いです。公式の文書 –

+0

@Barmarでは、それはあなたの提案を使ってトリミングされますが、それでも失敗します。 – JustJohn

答えて

0

まず同じように起動する必要があり、あなたはカミソリでurl.action代わりにハードコーディングを使用する必要があります。もうルーティング問題はありません。

@Url.Action("Information", "Admin", new { id = UrlParameter.Optional }) 

こちらをご覧ください:Url.Action parameters?

そして.ASSIGN( "URL")のようなjsの方法を使用します。

+0

あなたのリンクは私を助けました。なんらかの理由で、私が必要とするものの周りにボタンタグを置くと、blueimpイメージギャラリーのjsコードがウィンドウを閉じるだけでした。私はあなたの他の答えへのリンクを研究しました。 。 。 。 。 var id = document.getElementById( 'h3Title')。innerHTML.trim(); window.location.href = "/ Home/DeletePhoto?photoId =" + id; 。 。 。 。 。 。動作するようです。 。 。感謝します。 。 。おそらく、剃刀Url.Actionを使用することができますが、今はidを渡して写真を削除し、削除された写真なしでインデックスページに戻ります。ありがとうございました – JustJohn

0

あなたのコードは、おそらくこのanswerによる
public ActionResult DeletePhoto(int photoId)

で、サーバー側で削除IDをキャッチすることができません、特定のリソースを削除するには、サーバーを尋ねるために、あなたのルートは/Home/DeletePhoto/{photoId}のように処理しなければなりません。

そして
window.location.href = "/Home/DeletePhoto/"+id;

+1

ありがとうございます。私はそれを試みた、私も、それは動作すると思ったが、それはしませんでした。 "/ Home/DeletePhoto?photoId =" + id;働いた。 go figure – JustJohn

関連する問題