C#,使用cshtml和sql,页面代码中出现错误

C#,使用cshtml和sql,页面代码中出现错误,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在尝试使用cshtml和c#创建一些动态页面 我的目标是,当我转到admin/post/时,我可以添加/新建或/编辑到我想去的地方,但是我的浏览器中出现了一个奇怪的错误,如下所示: System.Collections.ObjectModel.ReadOnlyCollection'不包含“标题”的定义 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 **Exception Details: Microsoft.CSharp.Runt

我正在尝试使用cshtml和c#创建一些动态页面

我的目标是,当我转到admin/post/时,我可以添加/新建或/编辑到我想去的地方,但是我的浏览器中出现了一个奇怪的错误,如下所示:

System.Collections.ObjectModel.ReadOnlyCollection'不包含“标题”的定义

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

**Exception Details: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Collections.ObjectModel.ReadOnlyCollection<object>' does not contain a definition for 'title'
Source Error: 
Line 8:  @if(!mode.IsEmpty())
Line 9:  {
Line 10:     var posted = Post.Current; // error is here
Line 11:     
Line 12:     <div>** 


你是什么意思我的朋友这是我的帖子处理程序如果有帮助:它是某个系统存储库的本机对象。我应该使用其他对象/你是什么意思我的朋友这是我的帖子处理程序如果有帮助:它是某个系统存储库的本机对象。我应该使用其他对象吗/
@{
    var mode = Post.mode;
}

@if(!mode.IsEmpty())
{
    var posted = Post.Current;

    <div>
    <form name="post" method="post" action="~/admin/post.ashx">
        <input type="hidden" name="mode" value="@mode" />
        <p>Title: <input type="text" name="postTitle" value="@posted.title" /></p>
        <p>Content: <textarea name="postContent">@posted.content</textarea></p>
        <p><input type="submit" name="postSubmit" value="Create Post" /></p>
    </form>
</div>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.WebPages;
using System.Dynamic;
using WebMatrix.Data;
using System.Collections.ObjectModel;

public class Post
{
    public Post()
    {
    }

    private static WebPageRenderingBase page
    {
        get { return WebPageContext.Current.Page; }
    }

    public static String mode
    {
        get
        {
            if (page.UrlData.Any())
            {
                return page.UrlData[0];
            }
            return string.Empty;
        }

    }

    public static string Slug
    {
        get
        {
            if (mode == "edit")
            {
                return page.UrlData[1];
            }

            return string.Empty;
        }
    }

    public static dynamic Current
    {
        get
        {
            using (var db = Database.Open("DefaultConnection"))
            {
                var sql = "SELECT * FROM table_posts WHERE Slug = @0";

                var result = db.Query(sql, Slug);

                return result ?? CreatePostObject();
            }
        }
    }

    private static dynamic CreatePostObject()
    {
        dynamic obj = new ExpandoObject();

        obj.title = String.Empty;
        obj.content = String.Empty;
        obj.DateCreated = DateTime.Now;
        obj.DatePublished = null;
        obj.Slug = String.Empty;
        obj.Authorid = null;

        return obj;
    }
public class PostHandler : IHttpHandler
{
    public PostHandler()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        var title = context.Request.Form["postTitle"];
        var content = context.Request.Form["postContent"];
        var slug = CreateSlug(title);


        using (var db = Database.Open("DefaultConnection"))
        {
            var sql = "SELECT * FROM table_posts WHERE Slug = @0";

            var result = db.QuerySingle(sql, slug);

            if (result != null)
            {
                throw new HttpException(409, "Slug gone bruh!");
            }

            sql = "INSERT INTO table_posts (title, content, authorid, slug) " +
                "VALUES (@0, @1, @2, @3)";

            db.Execute(sql, title, content, 1, slug);

            context.Response.Redirect("~/admin/post/");
        }
    }

    public static String CreateSlug(String title)
    {
        title = title.ToLowerInvariant().Replace(" ", "-");
        title = Regex.Replace(title, @"[^0-9a-z-]", String.Empty);

        return title;
    }
}