Asp.net mvc 在ASP.NET MVC中编辑数据库时,值为空

Asp.net mvc 在ASP.NET MVC中编辑数据库时,值为空,asp.net-mvc,Asp.net Mvc,我在ASP.NET模型视图控制器中的项目有问题 我有一本申请书。我可以成功创建来宾,但无法编辑它们 看: 1.我开始申请-一切正常 2.我创建了一个guest-all ok guest拥有所有输入的数据 3.我单击编辑-全部确定 4.我看到一扇新窗户。屏幕上的所有字段都有正确的数据,但我在编辑函数中有一个断点,我看到所有变量都是空的 型号: using System; using System.Collections.Generic; using System.Linq; using Syste

我在ASP.NET模型视图控制器中的项目有问题

我有一本申请书。我可以成功创建来宾,但无法编辑它们

看: 1.我开始申请-一切正常 2.我创建了一个guest-all ok guest拥有所有输入的数据 3.我单击编辑-全部确定 4.我看到一扇新窗户。屏幕上的所有字段都有正确的数据,但我在编辑函数中有一个断点,我看到所有变量都是空的

型号:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace Guestbook.Models
{
    public class Guest
    {
        public int ID { get; set; }

        [Display(Name = "name", ResourceType=typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
              ErrorMessageResourceName = "nameRequired")]
        [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                          ErrorMessageResourceName = "nameLong")]
        public string name { get; set; }

        [Display(Name = "surname", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
              ErrorMessageResourceName = "surnameRequired")]
        [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                          ErrorMessageResourceName = "surnameLong")]
        public string surname { get; set; }

        [Display(Name = "firm", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
              ErrorMessageResourceName = "firmRequired")]
        [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                          ErrorMessageResourceName = "firmLong")]
        public string firm { get; set; }

        [Display(Name = "toWhom", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
              ErrorMessageResourceName = "toWhomRequired")]
        [StringLength(50, ErrorMessageResourceType = typeof(Resources.Resources),
                          ErrorMessageResourceName = "toWhomLong")]
        public string toWhom { get; set; }

        [Display(Name = "permitNumber", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
                  ErrorMessageResourceName = "permitRequired")]
        [Range(0, 10000, ErrorMessageResourceType = typeof(Resources.Resources),
                       ErrorMessageResourceName = "permitRange")]
        public int permitNumber { get; set; }

        [Display(Name = "magazine", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
              ErrorMessageResourceName = "magazineRequired")]
        public bool magazine { get; set; } 


        [Display(Name = "entranceTime", ResourceType = typeof(Resources.Resources))]
        [DataType(DataType.Date)]
        public DateTime? entranceTime { get; set; }


        [Display(Name = "entranceTimeTime", ResourceType = typeof(Resources.Resources))]
        public string entranceTimeTime { get; set; }


        [Display(Name = "exitDate", ResourceType = typeof(Resources.Resources))]
        [DataType(DataType.Date)]
        public DateTime? exitDate { get; set; }


        [Display(Name = "exitTime", ResourceType = typeof(Resources.Resources))]
        public string exitTime { get; set; }
    }

    public class GuestDBContext : DbContext
    {
        public DbSet<Guest> Guests { get; set; }
    }
}
视图:


首先,在您的视图中,您只输出一个表单变量,它是ID参数。仅显示所有其他模型特性。例如,您需要将它们输出为EditorFor或HiddenFor,以便将它们发回

其次,在编辑方法中,方法签名如下:

public ActionResult Edit([Bind(Include = "exitDate,exitTime")] Guest g)
正在告诉MVC模型绑定器仅绑定exitDate和exitTime属性,以便其他所有内容都显示为null。您可以删除该属性:

public ActionResult Edit(Guest g)
或添加需要传入的其他属性:

public ActionResult Edit([Bind(Include = "exitDate,exitTime,name,surname,etc...")] Guest g)

因此,如果将这两个问题结合起来,您将看到,即使ID属性也没有通过,并且所有内容都为null

首先,在您的视图中,您只输出一个表单变量,它是ID参数。仅显示所有其他模型特性。例如,您需要将它们输出为EditorFor或HiddenFor,以便将它们发回

其次,在编辑方法中,方法签名如下:

public ActionResult Edit([Bind(Include = "exitDate,exitTime")] Guest g)
正在告诉MVC模型绑定器仅绑定exitDate和exitTime属性,以便其他所有内容都显示为null。您可以删除该属性:

public ActionResult Edit(Guest g)
或添加需要传入的其他属性:

public ActionResult Edit([Bind(Include = "exitDate,exitTime,name,surname,etc...")] Guest g)
因此,如果将这两个问题结合起来,您将看到,即使ID属性也没有通过,并且所有内容都为null

使用

 @Html.TextBoxFor(... 
而不是

 @Html.DisplayFor(.... 
这样,视图将在表单提交后将它们传递给控制器“编辑”HttpPost ActionResult

仅用于将模型输出到屏幕。但是,它不允许以这种方式编辑它们,因此使用or

我不太确定是否要手动编辑“exitDate”和exitTime,但如果要手动编辑,则需要将其添加到视图中,并在将其添加到模型后将其包含在绑定属性中

如果是,则使用以下方法:

(Guest  guest) 
而不是绑定数据

应该包括一个用于此的绑定。

使用

 @Html.TextBoxFor(... 
而不是

 @Html.DisplayFor(.... 
这样,视图将在表单提交后将它们传递给控制器“编辑”HttpPost ActionResult

仅用于将模型输出到屏幕。但是,它不允许以这种方式编辑它们,因此使用or

我不太确定是否要手动编辑“exitDate”和exitTime,但如果要手动编辑,则需要将其添加到视图中,并在将其添加到模型后将其包含在绑定属性中

如果是,则使用以下方法:

(Guest  guest) 
而不是绑定数据


应该包含一个绑定。

首先,除了一个隐藏的输入之外,您没有创建任何控件,因此这是唯一可以发回的控件。其次,您指定[BindInclude=exitDate,exitTime],这样即使您发回的ID也会被忽略,因此当然每个属性都为null或默认值。@DavidG-exitDate和exitTime在编辑函数启动时为null@斯蒂芬·穆埃克,公元1年。我应该为所有变量写@Html.HiddenFor吗?公元2年。我试图包含所有变量,但不包含任何变量。它不起作用。只添加隐藏的输入并没有多大意义。这是一个编辑表单,所以您需要文本框或其他控件来编辑您的属性。忘了[BindInclude-…]位吧。所有属性都将在默认情况下绑定,只要您将它们发回!如果你真的使用了它,那么你无论如何都应该使用视图模型。首先,除了一个隐藏的输入,你没有创建任何控件,所以这是唯一可以发回的东西。其次,您指定[BindInclude=exitDate,exitTime],这样即使您发回的ID也会被忽略,因此当然每个属性都为null或默认值。@DavidG-exitDate和exitTime在编辑函数启动时为null@斯蒂芬·穆埃克,公元1年。我应该为所有变量写@Html.HiddenFor吗?公元2年。我试图包含所有变量,但不包含任何变量。它不起作用。只添加隐藏的输入并没有多大意义。这是一个编辑表单,所以您需要文本框或其他控件来编辑您的属性。忘了[BindInclude-…]位吧。所有属性都将在默认情况下绑定,只要您将它们发回!如果您确实使用了它,那么您应该使用视图模型。谢谢。它起作用了!我更改了editor上的DisplayFor以显示我想在屏幕上显示的参数,并为fo添加了hiddenfo
r视野中的其他人!我还删除了Bind属性。谢谢。它起作用了!我在编辑器上更改了要在屏幕上显示的参数的DisplayFor,并为视图中的其他参数添加了HiddenFor!我还删除了绑定属性。谢谢你的帮助。不幸的是,我不能投赞成票,因为投赞成票需要15%的声誉,但你的回答对我也有帮助np很高兴你得到了分类:谢谢你的帮助。不幸的是,我不能投赞成票,因为投赞成票需要15%的声誉,但你的回答对我也有帮助np很高兴你得到了分类: