首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC -表不更新

问ASP.NET MVC -表不更新
EN

Stack Overflow用户
提问于 2016-12-19 19:44:55
回答 1查看 515关注 0票数 1

我的应用程序旨在允许用户将即将发生的事件从列表中添加到个人日历中。个人日历被实现为一个表,在所有用户之间共享,该表将一个string UserID值链接到一个int EventID,主键有一个单独的int UserCalendarID。

但是,当调用该操作时,该表没有更新;该操作发布如下:

代码语言:javascript
复制
    [HttpPost]
    public IActionResult AddToCalendar(int ID)
    {
        var events = context.Events.ToList();
        Event _e = events.FirstOrDefault(x => x.EventID == ID);
        var calendars = context.Calendars.ToList();
        UserCalendar c = new UserCalendar
        {
            UserID = userManager.GetUserAsync(HttpContext.User).Result.UserName,
            EventID = _e.EventID
        };
        calendars.Add(c);
        context.SaveChanges();
        return View("Index");
    }

作为参考,这是将事件添加到Events表中的(工作)代码:

代码语言:javascript
复制
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> NewEvent(Models.NewEventViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var newEvent = new Event {
            Artist = await userManager.GetUserAsync(HttpContext.User),
            EventName = model.EventName,
            Time = model.Time,
            Venue = model.Venue,
            GenreID = model.GenreID
        };
        var events = context.Events;
        events.Add(newEvent);
        context.SaveChanges();
        ViewBag.Notification = "Your event has been added.";
        ViewBag.Color = "Green";
    }
    else {
        ViewBag.Notification = "Something went wrong — Event not added.";
        ViewBag.Color = "Red";
    }
    return View("Index");
}

我没有将ViewModel用于AddToCalendar的原因是没有专门针对它的视图;相反,它是由EventDetails页面上的表单中的一个按钮触发的,该按钮的定义如下:

代码语言:javascript
复制
@model Event
@{ 
    ViewData["Title"] = "Event Details";
    Event e = ViewBag.Event;
}

<h2>@ViewData["Title"]</h2>

<p><b>Event Name: </b>@e.EventName</p>
<p><b>Artist: </b>@e.Artist.ClientName</p>
<p><b>Date and Time: </b>@e.Time</p>
<p><b>Genre: </b>@e.Genre.GenreName</p>
<p><b>Venue: </b>@e.Venue</p>

@if (ViewBag.isYours)
{
    <a asp-action="DeleteEvent" asp-controller="Home" class="btn btn-danger" asp-route-id=@e.EventID>DELETE</a>
    <a asp-action="EditEvent" asp-controller="Home" class="btn btn-success" asp-route-id=@e.EventID>EDIT</a>
}
<form asp-action="AddToCalendar" asp-controller="Home" asp-route-id=@e.EventID asp-route-returnurl="@ViewData["ReturnUrl"]">
    <input type="submit" value="Add To Your Calendar" class="btn btn-default" />
</form>

我已经确认c正在添加到calendars中。为什么AddToCalendar事件不会导致表更新?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-19 20:19:18

注意,当您从数据库上下文中获取日历时,您将调用:

代码语言:javascript
复制
var calendars = context.Calendars.ToList();

这会将UserCalendar对象的列表加载到内存中。这不跟踪数据库中的实际日历表。当您将事件表添加到事件表时,您将得到如下所示的Events表对象:

代码语言:javascript
复制
var events = context.Events;

注意,没有调用"ToList()",这意味着要添加对"Events“的实际上下文对象的引用,而不仅仅是内存中的列表。

如果从调用中删除.ToList()以获取日历,它将跟踪数据库上下文对象,就像在调用中获取Events对象一样。这应该能解决你的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41229914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档