You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pluralsight课程实践中Razor Page无法保存MeetingSpace表单数据问题

问题根因

ASP.NET Core 模型绑定系统默认仅对公共属性进行数据绑定,不会绑定公共字段。你在MeetingSpace类中定义的Name、Location、Capacity都是公共字段,所以表单提交的对应值不会被绑定到对象上,最终得到的就是默认实例。

修复方案

修改MeetingSpace.cs,把三个公共字段改成带get/set的公共属性即可:

public class MeetingSpace : MeetingObjectsBaseClass, IEquatable<MeetingSpace>
{
    //private static int classCount = 3;          //TODO: Change to 0 default when database implemented
    // 将原公共字段修改为公共属性
    public string Name { get; set; }
    public string Location { get; set; }
    public int Capacity { get; set; }

    public override void EditDetails()
    {
        throw new NotImplementedException();
    }

    public bool Equals(MeetingSpace other)
    {
        if (Name == other.Name
            && Location == other.Location
            && Capacity == other.Capacity)
        { 
            return true; 
        }
        else 
        { 
            return false; 
        }
    }

    public override int GenerateNewId()
    {
        throw new NotImplementedException();
    }

    public override void GetAll()
    {
        throw new NotImplementedException();
    }
}

可选优化建议

  1. 表单提交后增加模型有效性校验,避免非法数据写入:
public IActionResult OnPost()
{
    if(!ModelState.IsValid)
    {
        return Page();
    }
    MeetingSpace = meetingSpaceData.Update(MeetingSpace);
    meetingSpaceData.Commit();
    // 提交成功后建议跳转到详情页/列表页,避免用户重复提交表单
    return RedirectToPage("./Detail", new { meetingSpaceId = MeetingSpace.Id });
}
  1. 确认MeetingObjectsBaseClass确实继承自BookingEntityBase,保证Id属性可以正常被绑定。

内容的提问来源于stack exchange,提问作者Nyle Alliss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:24:04