HttpPost

时间:2019-04-09 22:31:03

标签: c# asp.net asp.net-mvc

我正在ASP.Net中工作,并且有我要在页面中显示的ViewModel枚举。它们包含一个下拉列表,并且当所述下拉列表更新时,我必须对视图模型进行枚举,更改其内部的重用级别,然后将其与更改一起回发。但是,当我发表文章时,它没有发送包含的viewmodel,而是发送了一个空的枚举。

到目前为止,我已经尝试将我的“ foreach”切换为“ for”。我还尝试过更改一些名称,以查看模型绑定器是否是问题所在,但事实并非如此。

这是视图,视图模型和控制器的代码。

查看

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken();
    for (int i = 0; i < Model.Count(); i++)
    {
        @Html.DropDownListFor(model => model.ElementAt(i).PickedNormId, Model.ElementAt(i).PickableNorms, UiText.Prosyn.N_A, htmlAttributes: new { @class = "form-control dropdown_search", @name="NormPicker"@*, @onchange = "this.form.submit();"*@ })
    }
<div>
    <input name="selectedNormList" type="submit">
</div>
}

ViewModel

public class NormPickerViewModel : ViewModel
{
    public SelectList PickableNorms { get; set; }

    public int PickedNormId { get; set; }
}

控制器

public virtual ActionResult Index()
{
    List<NormPickerViewModel> viewModels = new List<NormPickerViewModel>();

    viewModels.Add(new NormPickerViewModel()
    {
        PickableNorms = new SelectList(
            _normRepository.GetAll().Where(x => x.Depth == 1).ToList(),
            "Id",
            "Description"
        )
    });

    return View(viewModels);
}

[HttpPost]
public virtual ActionResult Index(IEnumerable<NormPickerViewModel> selectedNormList)
{
    // selectedNormList's count is always zero.
}

通常,我希望可以找到在“获取”中传递的下拉菜单及其更新的选定值,但是我得到的是一个空的枚举。

1 个答案:

答案 0 :(得分:0)

我尝试复制您的源代码,您需要更新2个项目,并且它起作用:

在控制器中从MONGO_URL=mongodb://localhost:27017 更改为const dotenv = require('dotenv').config(); console.log(process.env.MONGO_URL); //you can access it straight way

在cshtml文件中为选择标签(DropDownListFor)IEnumerable<NormPickerViewModel> selectedNormList添加名称。

这是控制器代码

IEnumerable<NormPickerViewModel> normPickerViewModel

和cshtml代码

Name = "normPickerViewModel[" + i + "].PickedNormId"