没有给出与 'IHtmlHelper - DropDownListFor 的所需形式参数 'htmlAttributes' 相对应的参数

No argument was given that corresponds to the required formal parameter 'htmlAttributes' of 'IHtmlHelper - DropDownListFor

我遇到了一个目前尚未解决的问题,而且我真的找不到任何答案。 当我尝试构建下拉列表时出现的错误是:

 No argument was given that corresponds to the required formal parameter 'htmlAttributes'
 of 'IHtmlHelper<ContactUsPageModel>.DropDownListFor<TResult>(Expression<Func<ContactUsPageModel, TResult>>, IEnumerable<SelectListItem>, string, object)'

我的剃须刀视图页面 ContactUs.cshtml 中的代码具有以下结构:

@Html.DropDownListFor(model => model.Provincia,  PoblacionesExtensions.ToSelectList(ViewBag.locations), new{@class="form-control form-control-login font-weight-bold", @style="padding:0"} )  

在查看任务中,我正在使用 GetCurrentLocation() 函数获取我需要的所有省份,以便显示到我的下拉列表中。 我将所有位置传递给 ViewBag var.

我的Controller的代码是这样的:

    [AllowAnonymous]
    public async Task<IActionResult> ContactUs()
    {
        var data = new ContactUsPageModel();
        var user = await userSessionVars.GetCurrentUser();
        var locationsVar = await userSessionVars.GetCurrentLocation();
        ViewBag.locations = locationsVar;


        if (user != null)
        {
            data = new ContactUsPageModel()
            {
                Name = $"{user.Nombre} {user.Ape1} {user.Ape2}",
                Phone = user.UserName,
                Email = user.Email,
            };
        }

        return View(data);
    }  

这个任务来自我的助手。它连接到实体的一项服务并获取我需要的所有位置。它发出请求,接收 JSON 然后反序列化它:

   public async Task<List<string>> GetCurrentLocation(){
        var ConsultaLocalidadesEsp = await ServiceEntityHub.ConsultaLocalidadesEsp();
        var locations =  JsonConvert.DeserializeObject<List<PoblacionDto>>(ConsultaLocalidadesEsp);
        return  locations.Select(x => x.provincia).ToList();
    }

最后,我正在通过我制作的另一个 Helper 构建和 returning SelectList。它位于 /Helper/ 目录中。我 return 它到下拉列表 html 元素,在我的 View razor 页面中,我已经在问题的最顶部指出了这一点。

using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;
using System.Linq;

namespace Asistencia.Helper
{
    public static class PoblacionesExtensions
    {

        public static SelectList ToSelectList(this List<string> poblaciones )
        {
            if(!poblaciones.Contains("Selecciona tu provincia"))
            {
                poblaciones.Add("Selecciona tu provincia");
            }

            return new SelectList(poblaciones, "Selecciona tu provincia");

        }

    }
}

我终于找到了解决问题的方法。 我最后要做的是使用 IHtmlHelper DropDownList 而不是 DropDownListFor.

我的剃须刀查看代码:

@Html.DropDownList("Provincia",  PoblacionesExtensions.ToSelectList(ViewBag.locations), optionLabel: null, htmlAttributes: new{@class="form-control form-control-login font-weight-bold p-0"} )  

我的控制器的代码,用于返回带有我应用的模型的视图。

   [AllowAnonymous]
    public async Task<IActionResult> ContactUs()
    {
        var data = new ContactUsPageModel();
        var user = await userSessionVars.GetCurrentUser();
        var locationsVar = await userSessionVars.GetCurrentLocation();
        ViewBag.locations = locationsVar;

        if (user != null)
        {
            data = new ContactUsPageModel()
            {
                Name = $"{user.Nombre} {user.Ape1} {user.Ape2}",
                Phone = user.UserName,
                Email = user.Email,
                Provincia = locationsVar
            };
        }

        return View(data);
    }

这是我用来获取下拉列表位置的服务的任务。 我必须将最终接收到的位置变量显式声明为 List<string>.

类型
 public async Task<List<string>> GetCurrentLocation()
    {
        var ConsultaLocalidadesEsp = await ServiceEntityHub.ConsultaLocalidadesEsp();
        var locations =  JsonConvert.DeserializeObject<List<PoblacionDto>>(ConsultaLocalidadesEsp);
        List<string> locationsFinal = locations.Select(x => x.provincia).Distinct().ToList();
        return locationsFinal;
    }

作为最后的观察,我认为最初的问题是 DropDownListFor IHtmlHelper 造成的问题,因此通过应用这种新方法它解决了我的问题。