Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的局部视图没有正确地将值传递给模型_C#_Html_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

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文件夹中?