在 asp.net mvc 上提交复杂模型

Submit complex model on asp.net mvc

提问人:Roger Almirall Jou 提问时间:11/14/2023 最后编辑:Roger Almirall Jou 更新时间:11/14/2023 访问量:22

问:

我实际上正在尝试将整个页面模型提交到控制器。问题在于,由于模型是相互引用的对象列表,因此形式将是无限的。(至少如果我用传统的html形式做它,我不知道更好)

现在我将进入更多细节。

我在视图上使用的模型如下:

public class MeasureModel
{
    public int Id { get; set; }
    public TVList? tvList { get; set; }
}

作为 TVList 类:

public class TVList
{
    public List<TVStandard> StandardsList;
}

而 TVStandard 类继承自:

public abstract class TVItem
{
    public string Name;
    public TVItem Parent;
    public List<TVItem> Children;
    public bool IsSelected = false;
}

然后每个类都继承自这个类:

public class TVStandard : TVItem
{
    public string folderName;
}
public class TVSection : TVItem
{
    public string scriptName;
}
public class TVMode : TVItem
{}
internal class TVFreq : TVItem
{
    public string ID;
}

看到这一点后,在将模型传递给控制器之前,我想从模型中更改的唯一属性是属性。此属性通过树视图中的一系列复选框进行更改。 其余的将保持不变。 在这里你可以看到cshtml代码:IsSelected

<form method="post" action="/Launch/Home/retrieveSelection">
    @Html.HiddenFor(model => Model.tvList);
    <input type="number" name="Id" value="1234" style="display:none" />
    @*MIRAR PERQUE tvList SEMPRE ESTA A NULL   |||||   TESTEJAR SI EL QUE FALLA ES LA CHECKBOX A UN PROJECTE APART   |||||   PROVAR D'ENVIAR EL MODEL, SENSE CAP FORM*@
    <ul>
        @foreach (TVStandard tvstandard in Model.tvList.StandardsList) {
            int i = 0;
            <li>
                <input type="hidden" name="tvList.StandardsList[@i].folderName" value="@tvstandard.folderName" />
                <input type="hidden" name="tvList.StandardsList[@i].Name" value="@tvstandard.Name" />
                <span class="caret"></span>
                <input type="checkbox" class="checker" id="@tvstandard.Name" name="tvList.StandardsList[@i].IsSelected" value="true">
                <label for="@tvstandard.Name">@tvstandard.Name</label>
                <ul class="nested">
                    @foreach (TVSection tvsection in tvstandard.Children) {
                        int j = 0;
                        <li>
                            @* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].scriptName" value="@tvsection.scriptName" />
                            <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Name" value="@tvsection.Name" /> *@
                            <span class="caret"></span>
                            <input type="checkbox" class="checker" id="@tvsection.Name" name="tvList.StandardsList[@i].Children[@j].IsSelected" value="true">
                            <label for="@tvsection.Name">@tvsection.Name</label>
                            <ul class="nested">
                                @foreach (TVMode tvmode in tvsection.Children) {
                                    int k = 0;
                                    <li>
                                        @* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Name" value="@tvmode.Name" /> *@
                                        <span class="caret"></span>
                                        <input type="checkbox" class="checker" id="@tvmode.Name" name="tvList.StandardsList[@i].Children[@j].Children[@k].IsSelected" value="true">
                                        <label for="@tvmode.Name">@tvmode.Name</label>
                                        <ul class="nested">
                                            @foreach (TVFreq tvfreq in tvmode.Children) {
                                                int l = 0;
                                                <li>
                                                    @* <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].ID" value="@tvfreq.ID" />
                                                    <input type="hidden" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].Name" value="@tvfreq.Name" /> *@
                                                    <ul class="nested" style="display:block">
                                                        <input type="checkbox" class="checker" id="@tvfreq.Name" name="tvList.StandardsList[@i].Children[@j].Children[@k].Children[@l].IsSelected" value="true">
                                                        <label for="@tvfreq.Name">@tvfreq.Name</label>
                                                    </ul>
                                                </li>
                                                l++;
                                            }
                                        </ul>
                                    </li>
                                    k++;
                                }
                            </ul>
                        </li>
                        j++;
                    }
                </ul>
            </li>
            i++;
        }
    </ul>
    <br />
    <input type="submit" class="myULclass"/>
</form>

成为模特:@model MeasureModel;

因此,即使我尝试通过经典的 html 表单Javascript 提交它,我也无法正确完成。

有谁知道一种可能的方法?

JavaScript HTML ASP.NET-MVC 表单 模型

评论

0赞 Rory McCrossan 11/14/2023
So, evethough I've tried to submit it by a classic html form or Javascript I've not been able to do it right.我们需要查看您用于构建模型的代码并提交它,以便我们可以帮助您调试它。虽然概述模型本身的代码很有用,但它不是需要调试的部分。
0赞 Roger Almirall Jou 11/14/2023
好的,现在我已经编辑了这个问题。谢谢。

答: 暂无答案