加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 模型在表单发布到控制器时始终为NULL

发布时间:2020-12-16 00:09:39 所属栏目:asp.Net 来源:网络整理
导读:每当我提交表单时,传递给控制器??的模型都是NULL.我花了很长时间看这个.我想我在这里缺少一些基本的东西. @model VisitorPortal.Models.ReinviteVisitorModel@using (Html.BeginForm("CreateMeeting","Home",FormMethod.Post,new { @class = "form-horizonta
每当我提交表单时,传递给控制器??的模型都是NULL.我花了很长时间看这个.我想我在这里缺少一些基本的东西.
@model VisitorPortal.Models.ReinviteVisitorModel
@using (Html.BeginForm("CreateMeeting","Home",FormMethod.Post,new { @class = "form-horizontal",role = "form" }))
{
    @Html.AntiForgeryToken()
    <h3>Reinvitation Details</h3>
    <div>The information entered below will be sent to the visitors email address @Model.Info.Email</div>
    <hr />
    @Html.ValidationSummary("",new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.NewMeeting.Title,new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.NewMeeting.Title,new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.NewMeeting.StartTime,new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.NewMeeting.StartTime,new { @class = "datetimepicker form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.NewMeeting.EndTime,new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.NewMeeting.EndTime,new { @class = "datetimepicker form-control" })
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            @Html.HiddenFor(m => m.NewMeeting.SubjectId,new { @Value = Model.Info.SubjectId })
            <input type="submit" class="btn btn-default" value="Send Invite" />
        </div>
    </div>
}

该模型是:

public class Meeting
{
    [Key]
    public int Id { get; set; }

    public string SubjectId { get; set; }

    [Required]
    [Display(Name = "Reason for invitation")]
    public string Title { get; set; }

    [Required]
    [Display(Name = "Start Time")]
    [DataType(DataType.Time)]
    public DateTime StartTime { get; set; }

    [Required]
    [Display(Name = "End Time")]
    [DataType(DataType.Time)]
    public DateTime EndTime { get; set; }

    public string HostEmail { get; set; }

    public string HostMobile { get; set; }    
}

public class MeetingsDBContext: DbContext
{
    public DbSet<Meeting> Meetings { get; set; }
}

public class ReinviteVisitorModel
{
    public Visitor Info;
    public Meeting NewMeeting;
    public List<Meeting> Meetings;
}

Controller的行动是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CreateMeeting(Meeting meeting)
    {
        return RedirectToAction("ReinviteVisitor2",new { visitorId = meeting.SubjectId });
    }

我在模型中有字段,例如Id,我期望数据库填充我将在动作CreateMeeting()中编写的内容.是否必须在表单中使用模型中的所有字段?

解决方法

您视图中的模型是typeof ReinviteVisitorModel,这意味着自发布ReinviteVisitorModel以来POST方法的签名必须匹配
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateMeeting(ReinviteVisitorModel model)

或者,您可以使用BindAttribute的Prefix属性从您要发布的表单控件的名称中删除NewMeeting前缀.

public ActionResult CreateMeeting([Bind(Prefix="NewMeeting")]Meeting model)

附注:从隐藏输入中删除新的{@Value = Model.Info.SubjectId},然后在将模型传递给视图之前在GET方法中设置NewMeeting.SubjectId的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读