【问题标题】:ASP.Net MVC 5 difficulty with addition object to dbASP.Net MVC 5 难以将对象添加到数据库
【发布时间】:2017-03-07 23:53:44
【问题描述】:

为我的项目寻求帮助。尝试使用输入表单将对象添加到数据库。这是我的代码:

家庭控制器

   public class HomeController : Controller
    {   
        EventsContext db = new EventsContext();

        public ActionResult Index()
        {
            IEnumerable<Event> events = db.Events;
            ViewBag.Events = events;
            return View();

        }
        [HttpGet]
        public ActionResult CreateEvent()
        {
            return View();

        }
         [HttpPost]
        public ActionResult CreateEvent(AddEvent addEvent)
        {
            db.AddEvents.Add(addEvent);
            db.SaveChanges();

            return View("index");
        }
    }

目前我正在尝试对 AddEventId 进行硬编码并在表单中提供它,稍后我将对其进行更改。 这是输入表单:

<form method="post" action="">
            <table>
                <tr>
                    <td><p>Id :</p></td>
                    <td><input type="text" name="AddEventId" /> </td>
                </tr>
                <tr>
                    <td><p>Title :</p></td>
                    <td><input type="text" name="Title" /> </td>
                </tr>
                <tr>
                    <td><p>Date :</p></td>
                    <td><input type="text" name="Date" /> </td>
                </tr>
                <tr>
                    <td><p>Time :</p></td>
                    <td><input type="text" name="Time" /> </td>
                </tr>
                <tr>
                    <td><p>Address :</p></td>
                    <td><input type="text" name="Location" /></td>
                <tr>
                    <td><p>Lecturer:</p></td>
                    <td><input type="text" name="Responsible" /> </td>
                </tr>                   
                <tr><td><input type="submit" value="Submit" /> </td><td></td></tr>
            </table>
        </form>

AddEvent 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PhClub.Models
{
    public class AddEvent
    {        
        public int AddEventId { get; set; }
        public string Title { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
        public string Location { get; set; }
        public string Responsible { get; set; }


    }
}

事件类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace PhClub.Models
{
    public class Event
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Date { get; set; }
        public string Time { get; set; }
        public string Location { get; set; }
        public string Responsible { get; set; }
    }
}

它适用于硬编码事件

public class EventDbInitializer : DropCreateDatabaseAlways<EventsContext>
    {
        protected override void Seed(EventsContext db)
        {
            db.Events.Add(new Event { Title = "Name of Event", Date = "18/11/2017", Time = "20:00", Location = "Adress", Responsible = "Name" });
            db.Events.Add(new Event { Title = "Name of Event", Date = "03/03/2017", Time = "19:00", Location = "Adress", Responsible = "Name2" });
             //db.Events.Add(new Event { Title = "Title3, Date = "04/03/2017", Time = "217:00", Location = "School", Responsible = "Name"});

            base.Seed(db);
        }
    }

如果我在按下提交后理解正确,则应使用 CreateEvent post 方法,并且应将 Event 对象的所有元素传递给数据库中的 create 和 Event。之后,它应该填充在页面上。但是,新事件没有。我没看到什么?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您的表单张贴在哪里?:

    <form method="post" action="">
    

    据此,它将发布到当前 URL。如果这是索引操作,那么您只是回发到索引操作,不会向数据库添加任何内容。

    (顺便说一句,这是一个让您熟悉一些基本调试的好机会。在服务器端操作方法中放置断点并调试您的应用程序。查看发布表单时调用的方法。看看那里发生了什么以及将哪些值发送到服务器。)

    不要像这样手动编写&lt;form&gt; 标记,而是使用 ASP.NET MVC 表单助手。像这样的:

    @using(Html.BeginForm("CreateEvent", "Home"))
    {
        <!--- all the HTML in your form -->
    }
    

    表单的其余部分也可以真正受益于这些助手的使用,这样表单就可以从模型的结构中更动态地生成,而不是需要您手动维护它。有许多 MVC 示例和教程演示了这一点。在“MVC 表单助手”上快速搜索 Google 会导致 here 等其他地方。

    【讨论】:

    • 谢谢大卫,会去看看
    【解决方案2】:

    从外观上看,您是在 CreateEvent 中向 db.AddEvents 添加内容,但在 Index 方法中列出来自 db.Events 的内容。

    您的种子正在添加到db.Events,这就是列出您的硬编码项目的原因。

    尝试将您对AddEvents 的引用更改为Events。我认为这将解决您的问题。

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 2018-12-28
      • 2013-05-17
      • 2020-12-09
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      相关资源
      最近更新 更多