C# 我的局部视图没有正确地将值传递给模型
我有一个巨大的问题,我非常困惑。 我先给你讲一点背景知识。 我有两个模型,一个包含另一个C# 我的局部视图没有正确地将值传递给模型,c#,html,asp.net-mvc,asp.net-mvc-4,razor,C#,Html,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个巨大的问题,我非常困惑。 我先给你讲一点背景知识。 我有两个模型,一个包含另一个 public class AccountViewModel { public ChargeViewModel chargeViewModel { get; set; } other public values } 现在我有了一个视图,它引用了部分视图 @model MyModels.AccountViewModel [[Block_Header]] @{ Html.RenderPa
public class AccountViewModel
{
public ChargeViewModel chargeViewModel { get; set; }
other public values
}
现在我有了一个视图,它引用了部分视图
@model MyModels.AccountViewModel
[[Block_Header]]
@{ Html.RenderPartial("Header"); }
[[/Block_Header]]
[[ValidationSummary]]
@Html.ValidationSummary(false)
[[/ValidationSummary]]
[[Block_ReloadOptions]]
<div data-role="fieldcontain">
<fieldset data-role="controlgroup" data-type="horizontal" class="amount-bar">
<legend>Select an amount</legend>
@{
List<int> PresetValues = Main.Denominations.Split(',').Select(x => Convert.ToInt32(x.Trim())).ToList();
}
@if (PresetValues.Count > 0){
int i = 1;
foreach (int value in PresetValues) {
<input type="radio" name="amount" id="amount@(i)" value="@value" @(Model.chargeViewModel.ChargeAmount == value ? "checked" : "")>
<label for="amount@(i)">$@value</label>
i++;
}
}
<label for="select-amount">Select Amount</label>
<select name="select-amount" id="select-amount" class="select-amount" data-role="select">
<option value="">Other</option>
@if (Model.chargeViewModel.OtherValues.Count > 0){
foreach (int value in Model.chargeViewModel.OtherValues)
{
<option value="@value" @(Model.chargeViewModel.ChargeAmount == value ? "selected" : "") >$@value</option>
}
}
</select>
@Html.HiddenFor(m => m.chargeViewModel.ChargeAmount, new { id="hiddenAmount", value="0" })
</fieldset>
</div>
现在我的部分观点看起来像
@model VirtualNext.Web.Models.ChargeViewModel
<div class="ui-block-a">
<fieldset data-role="controlgroup" data-type="horizontal" class="field-margin validate expiry-select">
<label for="select-expiry-month" class="ui-hidden-accessible">Month</label>
@Html.DropDownListFor(m => m.ExpMonth, Model.ddlMonths, new { id = "select-expiry-month", @class= "validate"})
<label for="select-expiry-year" class="ui-hidden-accessible">Year</label>
@Html.DropDownListFor(m => m.ExpYear, Model.ddlYears, new { id = "select-expiry-year", @class= "validate validateExpiry validateYear" })
</fieldset>
</div>
现在我有了直接通过主视图传入的所有数据,但是部分视图中没有任何数据像我希望的那样填充模型。现在这是我的移动网站的一部分,我的桌面上有一些非常相似的东西,所以我真的很困惑为什么它不能工作。如果您有任何想法/建议,我们将不胜感激。您的装订错误。控制器中不需要两个模型。可以将子模型与主模型绑定,如 局部视图
@model VirtualNext.Web.Models.ChargeViewModel
@{
ViewData.TemplateInfo.HtmlFieldPrefix = "AccountViewModel"; //bind to main model
}
1型控制器
public ActionResult MyAction(AccountViewModel model)
另外,我建议您通过ViewData传递前缀,以使视图更灵活
@model VirtualNext.Web.Models.ChargeViewModel
@{
ViewData.TemplateInfo.HtmlFieldPrefix = ViewData["htmlprefix"];
}
使用此选项,您可以在许多控制器操作中使用此视图。只需传递前缀并将子模型绑定到所需的任何模型。您的绑定错误。控制器中不需要两个模型。可以将子模型与主模型绑定,如 局部视图
@model VirtualNext.Web.Models.ChargeViewModel
@{
ViewData.TemplateInfo.HtmlFieldPrefix = "AccountViewModel"; //bind to main model
}
1型控制器
public ActionResult MyAction(AccountViewModel model)
另外,我建议您通过ViewData传递前缀,以使视图更灵活
@model VirtualNext.Web.Models.ChargeViewModel
@{
ViewData.TemplateInfo.HtmlFieldPrefix = ViewData["htmlprefix"];
}
使用此选项,您可以在许多控制器操作中使用此视图。只需传递前缀并将子模型绑定到所需的任何模型。将局部视图放入Views/Shared/EditorTemplates文件夹 然后,将视图中的Html.Partial行替换为:
@Html.EditorFor(model => model.ChargeViewModel, "MobileModelView")
public ActionResult MyAction(AccountViewModel model)
{
// Some code...
}
并且,将您的操作替换为以下内容:
@Html.EditorFor(model => model.ChargeViewModel, "MobileModelView")
public ActionResult MyAction(AccountViewModel model)
{
// Some code...
}
将局部视图放在Views/Shared/EditorTemplates文件夹中 然后,将视图中的Html.Partial行替换为:
@Html.EditorFor(model => model.ChargeViewModel, "MobileModelView")
public ActionResult MyAction(AccountViewModel model)
{
// Some code...
}
并且,将您的操作替换为以下内容:
@Html.EditorFor(model => model.ChargeViewModel, "MobileModelView")
public ActionResult MyAction(AccountViewModel model)
{
// Some code...
}
将FormCollection参数添加到控制器操作中,如下所示:
公共操作结果MyAction(AccountViewModel、ChargeViewModel、ChargeViewModel、FormCollection值)
,并在操作开始处放置断点,以查看是否正在发布ChargeViewModel属性值。向控制器操作添加FormCollection参数,如下所示:public ActionResult MyAction(AccountViewModel、ChargeViewModel、ChargeViewModel、FormCollection值)
,并在操作的开始处放置断点,以查看是否正在发布ChargeViewModel属性值。我无法重命名该部分视图,这是我从回答中看到的唯一问题。没关系。请参阅更新的答案。指定名称时,可能不必将其放在EditorTemplates文件夹中。我不确定。你可以试试。现在就来测试这个。。我发誓,如果这样做有效的话,你就是最好的。不幸的是,由于局部视图显示不正确,我没能让它正常工作/什么意思?它根本就没被展示出来,还是怎么了?你的部分视图是否在EditorTemplates文件夹中?我无法重命名该部分视图,这是我从这个答案中看到的唯一问题。没关系。请参阅更新的答案。指定名称时,可能不必将其放在EditorTemplates文件夹中。我不确定。你可以试试。现在就来测试这个。。我发誓,如果这样做有效的话,你就是最好的。不幸的是,由于局部视图显示不正确,我没能让它正常工作/什么意思?它根本就没被展示出来,还是怎么了?您的partal视图是否在EditorTemplates文件夹中?