2014-10-17 4 views
0

Я создал всплывающее окно кендо, которое загружает выпадающий список из контроллера в содержимом. Я также добавил событие изменения, которое получает идентификатор выбранного индекса и передает его контроллеру и возвращает частичный вид с текстовыми полями, которые могут меняться в зависимости от выбора, поэтому создание текстовых полей должно быть динамическим. Я попробовал добавить Html.Partial (_myPartialView), но результаты не являются рендерингом. Что я делаю не так?MVC добавить частичный вид существующего всплывающего окна kendo

@(Html.Kendo().Window() 
    .Name("userSetupWindow") 
    .AppendTo("#useAcct") 
    .Width(600) 
    .Height(600) 
    .Scrollable(false) 
    .Modal(true) 
    .Title("New Setup") 
    .Actions(actions => actions.Refresh().Close()) 
    .Draggable() 
    .Content("<section id='CreateLink' class = 'saveNewDialog-screen'>" + 
      "<div class='saveNewLinkDialog' style='border: none;' >" + 
      "<div style='border: none;'>" + 
     "<table>" + 
       "<tr style='height: 30px;'>" + 
       "<td style='width: 30%; vertical-align: top;'>" + 
        "<div id='divAccounts' class ='createNew'> " + 
        "<label id='lbList' for='createNew' class='CreateNew-Label'>Select New</label>&nbsp;" + 
        Html.Kendo().DropDownList() 
        .Name("userList") 
        .DataSource(source => source.Read(read => read.Action("GetUsers", "UserAcctMgmt") 
        .Data("getSelectedId") 
        .Type(HttpVerbs.Post))) 
        .DataTextField("UserName") 
        .DataValueField("Id") 
        .Value("Id") 
        .SelectedIndex(0) 
        .Events(events => events.DataBound("onDropDownDataBound")) 
        .Events(events => events.Change("onSelect")) + 
        "</div>" + 
        "</td>" + 
        "</tr>" + 
        "<tr style='height: 30px;'>" + 
        "<td>&nbsp;</td>" + 
        "<td>" + 
        "<div id='divButtons' class='createNew-buttonContainer'>" + 
         "<button id='createNewLink-cancel' class='k-button saveNewButtons' >Cancel</button>&nbsp;" + 
         "<button id='createNewLink-save' class='k-button saveNewButtons'>Save</button>" + 
        "</div>" + 
        "</td>" + 
        "</tr>" + 
        "<tr style='height: 80px;>" + 
        "<td>" + 
        "<div id='div-textboxes'>" + 
       Html.Partial(_dynamicPartialView) 
        "</div>" + 
        "</td>" + 
        "</tr>" + 
      "</table>" + 
       "</div>" + 
       "</div>" + 
       "</section>'" 
).Events(events => events.Close("onPopupClose")) 

В контроллере:

[HttpPost] 
    public ActionResult GetUserFields(string Id) 
    { 
     if (!string.IsNullOrWhiteSpace(Id)) 
     { 
      var fields = GetuserFields(int.Parse(Id)); 

      var model = new FieldModel 
      { 
       Fields = fields 
      }; 

      return PartialView("_dynamicPartialView", model); 
     } 

     return null; 
} 

Jquery работает, и он берет меня на частичный вид

function onSelect(e) { 
     e.preventDefault(); 
     var selectedId = this.dataItem(e.item).id; 

     $.ajax({ 
      url: "@Url.Action("GetUserFields", "UserModel")", 
      type: 'POST', 
      cache: false, 
      data: JSON.stringify({ Id: selectedId }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json" 
     }); 
    } 

Вот частичный вид (_dynamicPartialView)

@model Models.UserFieldModel 
@using Kendo.Mvc.UI 

@if (Model != null) 
{ 
foreach (var item in Model.UserFields) 
{ 
<p>@item.FieldName</p> 

if (item.FieldType.ToString().ToUpper() == "TEXTBOX") 
{ 
    if (item.IsCaseSensitiveField) 
    { 
     @(Html.Kendo().TextBox() 
       .Name("caseSensitive") 
     ) 
    } 
    else 
    { 
     @(Html.Kendo().TextBox() 
       .Name("textInput") 
     ) 
    } 
    } 
} 
} 

ответ

0

Я не реализовал ваш код, так что это просто предположение, что вы интерпретируете то, что у вас есть. Похоже, вы ничего не делаете с ответом от вызова, чтобы получить частичный вид. В вашем методе onSelect javascript ничего не происходит, когда вызов преуспел. Это означает, что вы вызываете действие GetUserFields на контроллере, и оно возвращает частично обработанное изображение, но метод javascript onSelect эффективно игнорирует результат.

Возможно, вам нужно добавить некоторую логику в успешную часть вашего вызова ajax.

function onSelect(e) { 
    e.preventDefault(); 
    var selectedId = this.dataItem(e.item).id; 

    $.ajax({ 
     url: "@Url.Action("GetUserFields", "UserModel")", 
     type: 'POST', 
     cache: false, 
     data: JSON.stringify({ Id: selectedId }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json" 
     success: function(){ 
      // attach the response to the existing DOM 
     } 
    }); 
} 

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

  • Нет связанных вопросов^_^