ASP.NET MVC3 добавляет HtmlFieldPrefix при вызове Controller.PartialView - PullRequest
21 голосов
/ 08 июля 2011

Я выполняю частичное представление как часть запроса Ajax.

Когда я вызываю частичное представление из вида:

int i=0;
foreach(var rule in Model.Rules) {
    @Html.Partial("ValidationRuleRow", rule, new ViewDataDictionary { 
        TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = string.Format("Rules[{0}]", i) } })   
    i++;
}

Я могу установить HtmlFieldPrefix, чтобы разрешить правильное связывание модели.

Я хочу, чтобы пользовательбыть в состоянии добавить новый ValidationRuleRow на лету через ajax, например:

$.ajax({
    type: "GET",
    url: "/Monitors/NewMonitorValidationRule",
    success: function (data, textStatus, jqXHR) {
        var element = $(data);
        $("#ValidationRuleContainer").append(element);
    }
});

Так что у меня есть действие в моем контроллере для получения HTML:

public ActionResult NewMonitorValidationRule()
{
    ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next};
    var view = PartialView("ValidationRuleRow", rule);
    // CODE TO SET PartialView field prefix
    return view;
}

Возвращенный HTML ненет префикса.Есть ли способ установить префикс при вызове PartialView из действия в контроллере?

Ответы [ 2 ]

28 голосов
/ 03 мая 2015

Еще лучше, вы можете установить ViewData.TemplateInfo.HtmlFieldPrefix внутри действия контроллера,

public Actionresult MyAction()
{
   ...
   ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";

   return PartialView("MyView", viewmodel);
}

Нет необходимости в ViewBag или свойстве в модели представления.

18 голосов
/ 08 июля 2011

Вы можете передать эту информацию как часть модели представления:

public ActionResult NewMonitorValidationRule()
{
    ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next};
    // CODE TO SET PartialView field prefix
    rule.MyPrefix = "Rule[153]";
    return PartialView("ValidationRuleRow", rule);
}

и внутри частичного представления ValidationRuleRow.cshtml используйте это свойство модели представления для установки префикса:

@{
    if (!string.IsNullOrEmpty(Model.MyPrefix))
    {
        ViewData.TemplateInfo.HtmlFieldPrefix = Model.MyPrefix;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...