我将部分视图呈现为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以允许正确的模型绑定。
我希望用户能够通过ajax动态添加新的ValidationRuleRow,例如:
$.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没有前缀。无论如何在从Controller中的Action调用PartialView时设置前缀吗?
答案 0 :(得分:18)
您可以将此信息作为视图模型的一部分传递:
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;
}
}