2011-02-23 2 views
1
$("#ftp-dialog").dialog({ autoOpen: false }); 
    $('.ftp').live("click", function(event) { loadDialog(this, event, '#ftp-dialog'); }); 
}); 
    function loadDialog(tag, event, target) { 
     event.preventDefault(); 
     var $loading = $('<img src="../../Content/images/ajaxLoading.gif" alt="loading" class="ui-loading-icon">'); 
     var $url = $(tag).attr('href'); 
     var $title = $(tag).attr('title'); 
     var $dialog = $('<div></div>'); 
     $dialog.empty(); 
     $dialog 
      .append($loading) 
      .load($url) 
      .dialog({ 
       autoOpen: false, 
       title: $title, 
       width: 300, 
       modal: true, 
       minHeight: 200, 
       show: 'fade', 
       hide: 'fade' 
      }); 


      $dialog.dialog("option", "buttons", { 
       "Cancel": function() { 
        $(this).dialog("close"); 
        $(this).empty(); 
       }, 
       "Save": function() { 
        var dlg = $(this); 
        $.ajax({ 
         url: $url, 
         type: 'POST', 
         data: $("#target").serialize(), 
         success: function(response) { 
          $(target).html(response); 
          dlg.dialog('close'); 
          dlg.empty(); 
          $("#ajaxResult").hide().html('Record saved').fadeIn(300, function() { 
           var e = this; 
           setTimeout(function() { $(e).fadeOut(400); }, 2500); 
          }); 
         }, 
         error: function(xhr) { 
          if (xhr.status == 400) 
           dlg.html(xhr.responseText, xhr.status);  /* display validation errors in edit dialog */ 
          else 
           displayError(xhr.responseText, xhr.status); /* display other errors in separate dialog */ 

         } 
        }); 
       } 
      }); 


     $dialog.dialog('open'); 
    }; 

А вот вид и контроллер:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<jh.Models.editFtpViewModel>" %> 
<%using (Html.BeginForm("EditFtp", "Pages", FormMethod.Post, new { id = "target" })) 
    { %> 
<table> 
    <tr> 
     <td colspan="2"> 
      Enter Ftp Address: 
      <%=Html.TextBoxFor(x => x.ftpAddress, new {@class="text ui-widget-content ui-corner-all"})%> 
     </td> 
     <td> 
     </td> 

    </tr> 
    <tr> 
     <td> 
      Login Name:<br/> 
      <%=Html.TextBoxFor(x => x.loginName, new { @class = "text ui-widget-content ui-corner-all", style="width:120px;"})%> 
     </td> 
     <td> 
      Password: 
      <%=Html.PasswordFor(x => x.Password, new { @class = "text ui-widget-content ui-corner-all", style="width:120px;" })%> 
     </td> 
    </tr> 
</table> 
<input type="submit" id="button" value="Save" /> 
<%} %> 

Контроллер:

[HttpPost] 
     public ActionResult EditFtp(editFtpViewModel model) 
     { 
      return View(); 
     } 

Проблема заключается в том, что все значения то, что передается контроллеру, является нулевым. Но если я сделаю простой подарок, все будет в порядке. Кто-нибудь может мне помочь?

editFTPViewModel класс:

public class editFtpViewModel 
    { 
     public string ftpAddress { get; set; } 
     public string loginName { get; set; } 
     public string Password { get; set; } 
    } 

Я хочу передать значения формы в контроллер в соответствии с этой моделью.

+0

Можете ли вы показать, какие $ ("# target"). Сериализовать() do и editFtpViewModel класс. –

+0

Я просто хочу отправить данные формы контроллеру в соответствии с классом editFtpViewModel. – Alex

ответ

1

Значения, являющиеся нулевыми, состоят в том, что при вызове диалога он восстанавливает DOM, а MVC теряет входы. Когда вы изначально вызываете диалог, вам необходимо добавить:

open: function() { $(this).parent().appendTo("#target"); }

к конструктору. Так что в вашем случае это будет:

$("#ftp-dialog").dialog({ autoOpen: false, open: function() { $(this).parent().appendTo("#target"); } });

+0

Фантастический ответ. Большое спасибо за это. Я пытался решить эту проблему в течение последних нескольких часов и разрушал мою голову. еще раз спасибо. – Somedeveloper

Смежные вопросы