当前位置: 首页 > 知识库问答 >
问题:

模型状态。isvalid false,因为该项始终为null

陈弘厚
2023-03-14

所以我试着做一个asp。net core 2(visual studio 2017)。尝试为主银行创建一个简单的视图、新建、编辑和删除。我已经成功地在视图和创建新的,但现在我被困在编辑部分。因此,当用户单击“编辑”时,我打开新窗口并显示要编辑的详细信息,然后当他们单击“保存”按钮时,我保存了值(如创建新值时)。就这么简单。但出于某种原因,模型状态。isvalid for edit always false,当我尝试调试时,我发现除了主键之外,所有项都返回null(它们都显示在视图中)。请帮助我哪里做错了:

班级:


        public class MsBank
        {
            [Required(ErrorMessage = "Required.")]
            [RegularExpression(@"\b[A-Z0-9]{1,}\b", ErrorMessage = "Must Be Uppercase")]
            public string BankCode { get; set; }

            [Required(ErrorMessage = "Required.")]
            public string BankName { get; set; }

            public string BankBranch { get; set; }

            private SqlConnection con;
            private void connection()
            {
                PrjCommon dbhandle = new PrjCommon();
                con = new SqlConnection(dbhandle.GetSetting());
            }

    public bool AddBank(List smodel)
    {
        connection();
        SqlCommand cmd = new SqlCommand("SaveMsBank", con);
        cmd.CommandType = CommandType.StoredProcedure;

        foreach (var item in smodel) { 
        cmd.Parameters.AddWithValue("@BankCode", item.BankCode);
        cmd.Parameters.AddWithValue("@BankName", item.BankName);
        cmd.Parameters.AddWithValue("@BankBranch", item.BankBranch);
        cmd.Parameters.AddWithValue("@LastUpdatedBy", "Me");
        cmd.Parameters.AddWithValue("@LastUpdatedFromModule", "NET");
        }
        con.Open();
        int i = cmd.ExecuteNonQuery();
        con.Close();

        if (i >= 1)
            return true;
        else
            return false;
    }
}
    }

视图:


     @model List[MsBank]
    @{
        ViewData["Title"] = "Edit";
    }

    @using (Html.BeginForm())
        {
    @Html.AntiForgeryToken()

    
        
            

            @foreach (var item in Model) {
            
                Code :
                @Html.EditorFor(model => item.BankCode, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => item.BankCode, "", new { @class = "text-danger" })
            
            
                Name :
                @Html.EditorFor(model => item.BankName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => item.BankName, "", new { @class = "text-danger" })
            
            
                Branch :
                @Html.EditorFor(model => item.BankBranch, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => item.BankBranch, "", new { @class = "text-danger" })
            
            
                
            
            }
        
    
    }
    @ViewBag.Message
    
        @Html.ActionLink("Back to List", "Index")
    

    @section Scripts {
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }

和控制器:



       public ActionResult Edit(string BankCode)
        {
            MsBank ms = new MsBank();
            ModelState.Clear();
            return View(ms.GetData(BankCode));
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(string BankCode,List smodel)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    if (smodel.Count > 0)
                    {
                        MsBank ms = new MsBank();
                        if (ms.AddBank(smodel))
                        {
                            ViewBag.Message = "Bank Edited Successfully";
                            ModelState.Clear();
                        }
                        return RedirectToAction("Index");
                    }
                    else { ViewBag.Message = "Empty Record"; }
                }
                return View(smodel);
            }
            catch (Exception e)
            {
                ViewBag.Message = e.ToString();
                return View(smodel);
            }
        }

所以,更清楚地说,modelstate。上面的isvalid返回false(调试时我发现),因为bankname无效,因为它为null,所以bankbranch也为null

共有1个答案

施令秋
2023-03-14

在我看来,问题是您的视图正在接受msbank的IEnumerable,而实际上它应该只接受它的单个实例。然后,您将遍历该模型,该模型将编辑视图中表单字段的名称从BankCode更改为item\u BankCode,这就是为什么您将这些值返回null。

尝试将编辑视图更改为:

@model WebApplication2.Models.MsBank

@{
    ViewData["Title"] = "Edit";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    @:Code:
    @Html.EditorFor(model => model.BankCode, new { htmlAttributes = new { 
    @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.BankCode, "", new
    {
          @class = "text-danger"
    })

    @:Name:
    @Html.EditorFor(model => model.BankName, new { htmlAttributes = new { 
    @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.BankName, "", new
    {
        @class = "text-danger"
    })

    @:Branch:
    @Html.EditorFor(model => model.BankBranch, new { htmlAttributes = new { 
    @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.BankBranch, "", new
    {
        @class = "text-danger"
    })

    <button type="submit">Submit</button>
}

@ViewBag.Message

@Html.ActionLink("Back to List", "Index")

 类似资料:
  • 我正在使用React-useState创建状态为的对象。在成功调用API后,将更新为数据对象。 我有一个表单可以更改此状态,但我还有一个取消按钮。单击“取消”时,如何将此状态恢复为其初始值(API调用后)? 我应该创建另一个状态变量和存储初始状态在那里,然后更新我的状态基于?

  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 问题内容: 我正在编写一个C#ASP.Net MVC应用程序,供客户端将文件发布到其他服务器。我正在使用通用处理程序来处理从客户端到服务器的发布文件。但是在我的处理程序中,System.Web.HttpContext.Current.Request.Files始终为空(0个计数)。 表格代码: 处理程序: 请帮我。谢谢。 问题答案: 最后,我发现了问题。 由于某些原因,控制器中的代码永远无法正常工

  • 问题内容: 我使用firefox 3.6.10和firebug进行调试 所以,这是我的代码: responseXML 始终为null,我已经尝试了来自不同域的多个URL。我也异步地尝试过,结果是一样的。该 responseText的 总是正确返回,与它没有任何问题。 我的目标是获取 responseXML.documentElement 。 谢谢你的帮助。 编辑----------- 此javas

  • 如果我打开活动,复选框始终保持选中状态,即使我取消选中它并离开活动或关闭应用程序,在重新启动活动后,它也将保持选中状态。 我已尝试使用以下代码段保存活动的状态。 复选框应始终处于用户离开它的状态(选中或未选中)。

  • 问题内容: unbuntu 16.04,RAM 1GB,在AWS实例上 我必须运行elasticsearch的旧实例,所以我想使用elasticsearch 5.3.3版本的docker镜像。通过查看具有相同标题的stackoverflow多个链接,我修改了基于docker image的Elasticsearch的安装,如下所示 安装完成,并且访问elasticsearch时遇到问题,尽管我对上述