【问题标题】:error "System.ArgumentNullException: 'Value cannot be null. Parameter name: collection' "" ASP:NET MVC C# Visual Studio 2017 dataTables错误“System.ArgumentNullException:'值不能为空。参数名称:集合'”“ASP:NET MVC C# Visual Studio 2017 dataTables
【发布时间】:2020-07-13 07:49:35
【问题描述】:

我有一个数据表,可以在其中编辑数据。

它可以工作,但当我在我的模型中添加一些要求时不起作用:

    public class ModelTemplateEmail
{      
    [Display(Name = "EmailId")]
    public int EmailId { get; set; }
    [Display(Name = "UserName")][StringLength(20, ErrorMessage = "Do not enter more than 20 characters")]
    [MaxLength(20)]
    [Required(ErrorMessage = "Please enter a User name")]
    public string userName { get; set; }
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [Required(ErrorMessage = "Please enter an Email")]
    [RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "Email is not valid.")] 
    public string Email { get; set; }
    [Display(Name = "Title")]      
    public string Title { get; set; }
    [Display(Name = "Description")]
    public string description { get; set; }    
    public List<ModelTemplateEmail> EmailDataList { get; set; }     

    [Key]
    public int languageID { get; set; }
    [Display(Name = "Language")]
    public string MainLanguage { get; set; }

}

我收到一个错误

System.ArgumentNullException: '值不能为空。
参数名称:集合'

在我的视图中在一个下拉列表中进行调试时,这不是数据,我提出了要求,所以我不明白为什么会出现此错误以及如何解决它。

有错误的字符串是:

@Html.DropDownListFor(model => model.languageID, new List<SelectListItem>(ViewBag.MainLanguage), new { @class = "form-control" })

我的 DropDwnList 的控制器是:

public void MainLanguagelist()
    {
        var sqlstring = string.Format("SELECT [languageID], [MainLanguage] FROM [dbo].[Language]");

        var myConnection = getconection();
        SqlCommand myCommand = new SqlCommand(sqlstring, myConnection);
        myCommand.ExecuteNonQuery();
        SqlDataAdapter Language = new SqlDataAdapter(myCommand);
        DataSet setLanguageData = new DataSet();
        Language.Fill(setLanguageData);
        ViewBag.MainLanguageList = setLanguageData.Tables[0];
        List<SelectListItem> MainLanguageList = new List<SelectListItem>();

        foreach (DataRow MainLanguage in ViewBag.MainLanguageList.Rows)
        {
           MainLanguageList.Add(new SelectListItem {Text = @MainLanguage["MainLanguage"].ToString(),
           Value = @MainLanguage["languageID"].ToString()});
        }

        ViewBag.MainLanguage = MainLanguageList;


        try
        {             
            myConnection.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }

    }

动作结果:

    public ActionResult EditData(int EmailId, string userName, string Title, string Email, string description, int languageID)
    {

            ModelTemplateEmail Editdata = new ModelTemplateEmail
            {
              EmailId = EmailId, userName = userName, Email = Email, description = description,
              Title = Title, languageID = languageID
            };

             MainLanguagelist();

        return View(Editdata);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult EditData(ModelTemplateEmail modelEmail)
    {
        UpdateDataBase(modelEmail.EmailId, modelEmail.userName, modelEmail.Title, 
                       modelEmail.Email,modelEmail.description, modelEmail.languageID);


        return View ();
    }

【问题讨论】:

  • 可能 ViewBag.MainLanguage 值为空。确保在返回视图之前在控制器上设置它。

标签: c# asp.net-mvc visual-studio datatables


【解决方案1】:

我修复了在我的 http post 方法中添加 MainLanguagelist(); 的问题。

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2018-06-03
    • 2010-11-11
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多