2013-03-07 3 views
0

работает над созданием интерфейса, чтобы модульный подход к пользовательскому интерфейсу, фон:MVC4 - Форма данных и освежает динамически оказанной зрения

Позволяет пользователям перетаскивать модуль на DIV сообщения Jquery обратно в контроллер с модулем и панелью именами контроллера возвращает JsonResult, содержащее мнение, которое было вынесено, специфичное для данного модуля

Вот изображение пользовательского интерфейса, так что вы можете сортировать увидеть, что я делаю:

Image

Теперь, что я пытаюсь сделать, находится в том, что JsonResult (который содержит строковый вывод рендеринга представления), сохраняет некоторые данные обратно в модель и обновляет динамически визуализированный вид, так что просто панель (Где было показано представление) обновления.

Звучит сложно, я знаю, так что здесь какой-то код:

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult AddModule(string id, string returnTo) 
    { 
     string content = RenderView(id); 
     return Json(new { Target = returnTo, Content = content }); 
    } 
    private string RenderView(string moduleName) 
    { 
     string result = ""; 

     ContentModule module = (ContentModule)Activator.CreateInstance(Type.GetType("TrustMRM.BLL.ContentModules." + moduleName + ",TrustMRM.BLL")); 
     module.TrustID = Settings.Default.TrustID; 
     module.DataBind(); 
     this.ViewData.Model = module; 

     using (var sw = new System.IO.StringWriter()) 
     { 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, moduleName); 
      var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      result = sw.GetStringBuilder().ToString(); 
     } 
     return result; 
    } 

Выше, что обрабатывает «падение» модуля. У меня есть абстрактный класс, ContentModule и реализация BLLForumModule, есть сопоставление вида BLLForumModule.cshtml, который создается и возвращается в этой строке, сильно привязанный к BLLForumModule.

Что визуализируется это выпадающий список, равный некоторым данным, чтобы настроить этот конкретный модуль:

@model TrustMRM.BLL.ContentModules.BLLForumModule 
@{ 

Layout = null; 
} 

@if (Model.IsConfigured) 
{ 
    <span>I am configured</span> 
} 
else 
{ 
using (Html.BeginForm("RefreshModule", "Home")) 
{ 
    <h3 class="panelHeader">@Html.DisplayTextFor(m => m.Title)</h3> 
    <span>Select group</span> 
    @Html.DropDownListFor(m => m.SelectedGroupID, Model.GroupSelection.Select(t => new SelectListItem { Text = t.GroupName, Value = t.GroupID.Value.ToString() })); 
    @Html.HiddenFor(x => x.ModuleID);                              
    <input type="submit" value="Ok" />                                       

    } 
} 

Теперь, я уверен, что вернуться, или как справиться с этой должности для того, чтобы обновить это представление, которое было отображено в виде строки и отправлено назад, любое понимание этого, и если кто-то сделал что-то подобное раньше, возможно, мое рендеринг представления строки является неправильным подходом?

код, чтобы принять форму пост:

public ActionResult RefreshModule(string ModuleID) 
    { 
     return View(); 
    } 

(не работает)

+0

Пожалуйста, повторно задать, это не Asp-классик, это asp.net. –

+0

Я могу обойти это, используя jQuery для публикации значений модели и идентификатора модели обратно в контроллер и повторного отображения представления снова в результате JSON, если нет более оптимизированного подхода –

ответ

1

Нечто подобное поможет вам Using Ajax.BeginForm with ASP.NET MVC 3 Razor

Просто используйте Ajax.BeginForm и предоставить идентификатор замененного элемента.

Приложить проверки после запроса Ajax здесь MVC3 Unobtrusive Validation Not Working after Ajax Call

+0

Спасибо за это, похоже, в значительной степени направление, которое я думал, чтобы возглавить, действительно оцениваю это, приятно видеть, что в другой записи есть несколько подходов –

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

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