9

ASP.NET MVC3 アプリがあり、ユーザーがアンカー タグをクリックしたときに、3 つのデータをアクションに送信したいと考えています。

 <a onclick='editDescription(<#= DocID,FileName,Description #>)'></a>

これは私のアクションを呼び出すJavaScriptです:

   function editDescription(docId,fileName,description) {
     var url = "@Url.Content("~/OrderDetail/_EditDescription/")" + docId+'/'+
     fileName + '/' + description;
    //do the rest}

私の行動:

  public ActionResult _EditDescription(string id,string filename, string descritpion)

私が懸念しているのは FileName と Description です。これらは長すぎる可能性があり、URL を次のように表示したくないからです。

 http://localhost/OrderDetail/_EditDescription/123/some long filename.pdf/this is a    long description for the name

クエリ文字列のようにデータを送信せずに、データをアクションに送信するにはどうすればよいですか? ありがとう

4

3 に答える 3

17

jQuery $.ajax メソッドを使用できます。

<div id="what-I-want-updated">

  <input id="whatever-the-id-is" type="text" value="@Model.ID" />
  <br /> 
  <input id="whatever-the-filename" type="text" value="@Model.Filename" />
  <br />
  <input id="whatever-the-description" type="text" value="@Model.Description" />
  <br />
  <button id="whatIsClicked">Update!</button>

</div> <!-- /#what-I-want-updated -->

<script>

    // You're probably clicking something to initiate update 
    var $whatIsClicked = $('#whatIsClicked');

    // .live persists on the page even after other ajax calls
    // So when the thing is clicked
    $whatIsClicked.live('click', function() {

       // Grab the information needed to update
       var theId = $('#whatever-the-id-is').val(); //Or it could be .text()
       var theFilename = $('#whatever-the-filename').val();
       var theDescript = $('#whatever-the-description').val();

       // Let's edit the description!
       $.ajax({
         type: "POST",
         url: "OrderDetail/_EditDescription", // the method we are calling
         contentType: "application/json; charset=utf-8",
         data: {id: theId, filename: theFilename, description: theDescript},
         dataType: "json",
         success: function (result) {
             alert('Yay! It worked!');
             // Or if you are returning something
             alert('I returned... ' + result.WhateverIsReturning);                    
         },
         error: function (result) {
             alert('Oh no :(');
         }
     });
    });
</script>

それでも機能しますが、 Controller メソッドを次のように変更してください。

[HttpPost]
public ActionResult _EditDescription(string id, string filename, string descritpion)
于 2012-06-13T14:04:43.397 に答える
2

必要に応じて、ajax を介して、または属性$.postを持つアクションを使用して、フォームの完全な投稿を行うことができます。[HttpPost]

于 2012-06-13T13:56:16.407 に答える
0

アクションをPOSTとして宣言する

[HttpPost]
public ActionResult _EditDescription(string docId, string filename, string description)

非表示の HTML フォームを作成します。

<form action="@Url.Content("~/OrderDetail/_EditDescription/")" method="post" name="editDescriptionForm">
   <input type="hidden" name="docId" />
   <input type="hidden" name="fileName" />
   <input type="hidden" name="description" />
</form>

フォームに入力し、JS で送信します。

function editDescription(docId, fileName, description) {
    document.editDescriptionForm.docId = docId;
    ...

    document.editDescriptionForm.submit();
}
于 2012-06-13T14:03:59.137 に答える