Asp.net mvc 在按钮submit上获取IActionResult内的空列表-razor页面部分视图

Asp.net mvc 在按钮submit上获取IActionResult内的空列表-razor页面部分视图,asp.net-mvc,asp.net-core,razor-pages,Asp.net Mvc,Asp.net Core,Razor Pages,我正在尝试将ID列表传递给按钮submit上的IActionResult。ID来自下拉列表选择。我的视图是获取模型对象的局部视图问题是,当我提交时,列表总是空的。 我已经读到我们不能将列表传递给控制器!那么可能的方法是什么,我真的被困在这一天了 我只粘贴了我认为需要显示的部分代码, 如果您想查看其他代码,请告诉我 View.cshtml <form method="post" asp-page-handler="UpdateComponent"

我正在尝试将ID列表传递给按钮
submit
上的
IActionResult
。ID来自下拉列表选择。我的视图是获取模型对象的
局部视图问题是,当我提交时,列表总是空的。

我已经读到我们不能将列表传递给控制器!那么可能的方法是什么,我真的被困在这一天了

我只粘贴了我认为需要显示的部分代码, 如果您想查看其他代码,请告诉我

View.cshtml

    <form method="post" asp-page-handler="UpdateComponent">
.
.
.
        @{ 
            var value1 = 0;
            var value2 = 0; 
            var value3 =0;
        }
        <!-- asp-items="New plant SelectList"-->
        <select class="form-control Shoplist News-plant-select_1 mt-2" data-search="true"  asp-for="@value1">
            <option value="">Bitte auswählen</option>
        </select>
        <br />
        <!-- asp-items="New plant SelectList"-->
        <select class="form-control Shoplist News-plant-select_2 mt-2" data-search="true" asp-for="@value2">
            <option value="">Bitte auswählen</option>
        </select>
        <br />
        <!-- asp-items="New plant SelectList"-->
        <select class="form-control Shoplist News-plant-select_3 mt-2" data-search="true" asp-for="@value3">
            <option value="">Bitte auswählen</option>
        </select>

        @{

            Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value1 });
            Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value2 });
            Model.newsletterSubComponents.Add(new Models.NewsletterSubComponents() { NewPlantArticleId = value3 });

        }
        <input type="hidden" name="value1" value="@Model.newsletterSubComponents" asp-for="@Model.newsletterSubComponents"/>
.
.
.
<input type="submit" value="Speichern" class="btn btn-primary" />
</form>

.
.
.
@{ 
var值1=0;
var值2=0;
var值3=0;
}
奥斯瓦伦比特酒店

奥斯瓦伦比特酒店
奥斯瓦伦比特酒店 @{ Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value1}); Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value2}); Model.newslettesubcomponents.Add(newmodels.newslettesubcomponents(){NewPlantArticleId=value3}); } . . .
控制器

        public IActionResult OnPostUpdateComponent(NewsletterComponents component, int? newsId, int? shortArticleId,
            List<NewsletterSubComponents> newsletterSubComponents, int? test)
        {
                                               ^
                                               |
                                          list empty

.
.
.          
}
public IActionResult onpositionpdatecomponent(时事通讯组件组件、int?newsId、int?shortArticleId、,
列出子组件(int?测试)
{
^
|
列表为空
.
.
.          
}

我使用ajax填充下拉列表

    $.ajax(settings).done(function (data) {
        $.each(data, function (index, element) {
            $('.News-plant-select_1').append($("<option>").val(element.Id).text(element.NameGerman));
            console.log(element.NameGerman);
            $('.News-plant-select_2').append($("<option>").val(element.Id).text(element.NameGerman));
            console.log(element.NameGerman);
        });;

        //remove spinner
        $('.News-plant-select').removeClass("spinner-border");

    });
$.ajax(设置).done(函数(数据){
$.each(数据、函数(索引、元素){
$('.News-plant-select_1')。追加($(“”).val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
$('.News-plant-select_2')。追加($(“”).val(element.Id).text(element.NameGerman));
console.log(element.NameGerman);
});;
//拆下旋转器
$('.News plant select').removeClass(“微调器边框”);
});

如果您想要接收ID,我认为您可以使用List来接收它,同时保持参数名称与select元素中的名称相同。我根据您的代码制作了一个示例:

<form method="post" asp-page-handler="UpdateComponent">
    @{
        List<NewsletterSubComponents> newsletterSubComponents = new List<NewsletterSubComponents>
        {
            new NewsletterSubComponents{ NewPlantArticleId = 1, NewPlantArticleName = "AAA"},
            new NewsletterSubComponents{ NewPlantArticleId = 2, NewPlantArticleName = "BBB"},
            new NewsletterSubComponents{ NewPlantArticleId = 3, NewPlantArticleName = "CCC"}
        };
        var selectList = new SelectList(newsletterSubComponents, "NewPlantArticleId", "NewPlantArticleName");
    }

    <!-- asp-items="New plant SelectList"-->
    <select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_1 mt-2" data-search="true" asp-items="@selectList" >
        <option value="">Bitte auswählen</option>
    </select>
    <br />

    <!-- asp-items="New plant SelectList"-->
    <select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_2 mt-2" data-search="true" asp-items="@selectList">
        <option value="">Bitte auswählen</option>
    </select>
    <br />

    <!-- asp-items="New plant SelectList"-->
    <select name="newsletterSubComponentIds" class="form-control Shoplist News-plant-select_3 mt-2" data-search="true" asp-items="@selectList">
        <option value="">Bitte auswählen</option>
    </select>

    <input type="submit" value="Speichern" class="btn btn-primary" />
</form>

@{
列表子组件=新列表
{
新时事通讯子组件{NewPlantArticleId=1,NewPlantArticleName=“AAA”},
新时事通讯子组件{NewPlantArticleId=2,NewPlantArticleName=“BBB”},
新时事通讯子组件{NewPlantArticleId=3,NewPlantArticleName=“CCC”}
};
var selectList=new selectList(时事通讯子组件,“NewPlantArticleId”、“NewPlantArticleName”);
}
奥斯瓦伦比特酒店

奥斯瓦伦比特酒店
奥斯瓦伦比特酒店
结果:


谢谢@mj1313的回答,非常感谢您抽出时间。不过有件小事。我的列表实际上来自javascript。我已经用javascript快照更新了我的代码。在我的例子中,这三个下拉列表是使用javascript填充的。然后我想要的是将选定的int值存储到一个大小为3的列表中,并将它们传递给控制器。使用javascript没有区别,因为它们在呈现为html后是相同的。您只需要向select元素添加name属性,因为模型绑定是基于名称的。