我将部分视图呈现为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++;
}
Run Code Online (Sandbox Code Playgroud)
我能够设置HtmlFieldPrefix以允许正确的模型绑定.
我希望用户能够通过ajax动态添加新的ValidationRuleRow,如:
$.ajax({
type: "GET",
url: "/Monitors/NewMonitorValidationRule",
success: function (data, textStatus, jqXHR) {
var element = $(data);
$("#ValidationRuleContainer").append(element);
}
});
Run Code Online (Sandbox Code Playgroud)
所以我在我的控制器中有一个动作来获取HTML:
public ActionResult NewMonitorValidationRule()
{
ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next};
var view = PartialView("ValidationRuleRow", rule);
// CODE TO SET PartialView field prefix
return view;
}
Run Code Online (Sandbox Code Playgroud)
返回的HTML没有前缀.无论如何在从Controller中的Action调用PartialView时设置前缀?
Tho*_*der 28
更好的是,你可以在控制器动作中设置ViewData.TemplateInfo.HtmlFieldPrefix,
public Actionresult MyAction()
{
...
ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix";
return PartialView("MyView", viewmodel);
}
Run Code Online (Sandbox Code Playgroud)
视图模型中不需要ViewBag或属性.
Dar*_*rov 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);
}
Run Code Online (Sandbox Code Playgroud)
在局部视图内部ValidationRuleRow.cshtml使用此视图模型属性来设置前缀:
@{
if (!string.IsNullOrEmpty(Model.MyPrefix))
{
ViewData.TemplateInfo.HtmlFieldPrefix = Model.MyPrefix;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13128 次 |
| 最近记录: |