我有以下型号:
@model SmartSEOModel
public class SmartSEOModel
{
public SmartSEOSettingsModel SmartSEOSettingsModel { get; set; }
public SEOTemplateModel SEOTemplateModel { get; set; }
}
在我看来,我有一个局部视图,我称之为:
@using (Html.BeginForm())
{
some razor code here
<div id="pnlSmartSEO">
@Html.Partial(ViewNames.SmartSEOController_SEOTemplate, Model.SEOTemplateModel)
</div>
}
在局部视图中,有一些表单字段绑定到SEOTemplateModel。 问题是当我在HttpPost操作中收到SmartSEOModel时,SEOTemplateModel为null。好像通过将SEOTemplateModel复制到局部视图来传递SEOTemplateModel。
请告知原因以及解决方法。
非常感谢
我的部分视图如下:
@Html.Telerik().TabStrip().Name("SmartSEO").Items(x =>
{
x.Add().Text(T("Admin.SmartSEO").Text).Content(GetSmartSEOUI().ToHtmlString()).Selected(true);
})
@helper GetSmartSEOUI()
{
@(Html.LocalizedEditor<SEOTemplateModel, SEOTemplateLocalizedModel>("SmartSEO-Localized",
@<table class="adminContent">
<tr>
<td class="adminTitle">
@Html.NopLabelFor(model => model.Locales[item].CategoryTitleSEOTemplate):
</td>
<td class="adminData">
@Html.EditorFor(model => model.Locales[item].CategoryTitleSEOTemplate)
</td>
</tr>
</table>,
@<table class="adminContent">
<tr>
<td class="adminTitle">
@Html.NopLabelFor(model => model.CategoryTitleSEOTemplate):
</td>
<td class="adminData">
@Html.EditorFor(model => model.CategoryTitleSEOTemplate)
</td>
</tr>
</table>
))
}
我的HttpPost动作如下所示:
[HttpPost]
public ActionResult Configure(SmartSEOModel smartSEOModel)
{
var seoTemplate = SEOTemplateService.GetSEOTemplateById(smartSEOModel.SEOTemplateModel.Id);
if(seoTemplate == null)
{
throw new ArgumentException(String.Format("No SEOTemplate found with Id {0}", smartSEOModel.SEOTemplateModel.Id));
}
if (!ModelState.IsValid)
{
RedirectToAction("Configure");
}
SettingService.SaveSetting(smartSEOModel.SmartSEOSettingsModel.ToEntity());
seoTemplate = smartSEOModel.SEOTemplateModel.ToEntity(seoTemplate);
SEOTemplateService.UpdateSEOTemplate(seoTemplate);
UpdateLocales(seoTemplate, smartSEOModel.SEOTemplateModel);
//activity log
CustomerActivityService.InsertActivity("EditSEOTemplate", LocalizationService.GetResource("ActivityLog.EditSEOTemplate"));
SuccessNotification(LocalizationService.GetResource("SevenSpikes.NopSmartSEO.Admin.SEOTemplate.Notifications.SEOTemplateEdited"));
return View("SevenSpikes.Nop.Plugins.SmartSEO.Views.Configure", smartSEOModel);
}
答案 0 :(得分:0)
因为您在部分视图中没有表单,所以它不会保留数据。尝试使用@Html.EditorFor
代替@Html.Partial
。
所以你的主视图看起来像
@using (Html.BeginForm())
{
some razor code here
<div id="pnlSmartSEO">
@Html.EditorFor(model => model.SEOTemplateModel)
</div>
}
然后,您需要将局部视图移动到模板中。将部分视图重命名为EditorTemplates\SEOTemplateModel.cshtml
,并将其放在主视图所在的位置。
您还需要强烈输入模板:@model [namespace].SEOTemplateModel