2012-04-29 26 views
8

Tôi đang cố trả lại chuỗi HTML được tạo thành chế độ xem để tạo động một bảng HTML có kết quả. Tôi không thể nhận được chuỗi HTML trả về bất kỳ đề xuất và trợ giúp được đánh giá cao.Làm cách nào để trả lại HTML từ bộ điều khiển MVC sang div trong chế độ xem của tôi

Đây là mã điều khiển của tôi

public ActionResult ValidateTrams() 
    { 
     string html = ""; 
     if (Request.Files.Count == 0 || Request.Files[0].ContentLength == 0) 
     { 
     } 

     else 
     { 
      html = ProcessTextFile(Request.Files[0].InputStream); 
     } 

     return View(html); 
    } 

Tôi đang cố gắng để lấy này trở lại kết quả trong jquery như thế này

$('#tramsView').live('click', function() { 

$.ajax({ 
    url: '/Booking/ValidateTrams', 
    type: 'POST', 
    dataType: 'jsonp', 
    success: function (data) { 
     alert(data); 
     $('#TramsViewFrame').html(data); 
    }, 
    error: function (jqxhr, textStatus, errorThrown) { 
     $(window).hideWaitScreen(); 
     if (confirm(errorThrown)) { window.location.reload(); } 
    } 
}); 

});

Cuối cùng Bên dưới là CSHTML cho biểu mẫu. Ở đây tôi đang đọc một tệp từ biểu mẫu có loại nút gửi

<form action="#" method="post" enctype="multipart/form-data" class="forms" name="form" 
      id="frmvalidate"> 
      <table> 
       <tr> 
        <td> 
         <input type='file' name='trams' id='ValidatetramsFile' /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <br /> 
         <input name="cbDisplayUmatched" id="cbDisplayUmatched" type="checkbox" value="" checked="true" /> 
         <label style="text-decoration: none; outline: none; font-size: 1.1em; padding: 3px 0 0px 0;"> 
          Display rows that were <strong>NOT</strong> parsed</label> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <br /> 
         <div class="buttons"> 
          <button type="submit" value="VIEW" class="ui-state-default ui-corner-all" id="tramsView">VIEW</button> 
         </div> 
        </td> 
       </tr> 
      </table> 
      </form> 

Cảm ơn bạn đã dành thời gian và thực sự đánh giá cao sự giúp đỡ của bạn. Trân trọng!!!

Trả lời

4

Có vẻ như biểu mẫu của bạn vẫn gửi bài đăng bình thường, vì vậy mọi cuộc gọi không đồng bộ mà bạn đang thực hiện đang bị mất.

Cố gắng ngăn chặn việc nộp hình thức mặc định diễn ra như sau:

$('#tramsView').live('click', function (evt) { 

    evt.preventDefault(); 

    // ... rest of your code 

}); 

Ngẫu nhiên, trong trường hợp này, nếu tất cả các bạn đang làm là cập nhật html trên #TramsViewFrame của bạn, bạn chỉ có thể sử dụng đơn giản hơn một chút $.load() phương pháp:

$('#tramsView').live('click', function (evt) { 
    evt.preventDefault(); 
    $('#TramsViewFrame').load('/Booking/ValidateTrams'); 
}); 
14

bạn có thể trở HTML từ hành động như thế này,

return Content(html, "text/xml"); 
+0

Cảm ơn phản hồi Jayantha, tôi đã thử và nhận phản hồi nhưng xóa các điều khiển khác của tôi trên trang. Làm thế nào tôi sẽ làm điều này nếu tôi muốn tải kết quả này một phần trong một div –

+0

gọi nó bằng cách sử dụng ajax .. –

+0

Tôi sợ "text/xml" sẽ hoạt động. Có lẽ bạn có nghĩa là "văn bản/html" mimetype :) –

1

Trong điều khiển của bạn kể từ khi bạn đang sử dụng bài ajax bạn cần phải trả lại như JSON nó sẽ là một cái gì đó như thế này

return Json(html); 
3

Thực hiện những thay đổi này

Cho thuộc tính HttpPost trên điều khiển của bạn

[HttpPost] 
public ActionResult ValidateTrams() 

trở lại chuỗi như Json như thế này từ bộ điều khiển.

return Json(new { success = html }); 

Cuối cùng thay đổi datatype của bạn từ jsonp để json

$('#tramsView').live('click', function() { 
    $.ajax({ 
     url: '/Booking/ValidateTrams', 
     type: 'POST', 
     dataType: 'json', 
     success: function(data) { 
      alert(data.success); 
      $('#TramsViewFrame').html(data.success); 
     }, 
     error: function(jqxhr, textStatus, errorThrown) { 
      $(window).hideWaitScreen(); 
      if (confirm(errorThrown)) { 
       window.location.reload(); 
      } 
     } 
    }); 
});​ 

Tái bút: Nếu bạn đang sử dụng phiên bản mới nhất của jQuery (1.7+), hãy thay đổi handler .live-.on xử lý. Không bắt buộc :)

0

thay vì lưu trữ trong "chuỗi" mã cửa hàng html ở định dạng sau:

 HtmlString s = new HtmlString("<html coding/>"); 
     ViewData["Id_as_per_your_choice"] = s; 
     return View("page_you_want to_respond"); 

sau đó đặt "<%: ViewData [" Id_Same_as_that_in_above_code "]%>" nơi bạn muốn mã html xuất hiện ...... đơn giản ..... nhưng làm cho giá trị ban đầu của Viewdata là rỗng trong " index() "để mã không xuất hiện khi tải trang ....

Các vấn đề liên quan