【问题标题】:ASP EF Increment / Decrement Value with + / - buttons带有 + / - 按钮的 ASP EF 递增/递减值
【发布时间】:2016-04-25 09:10:13
【问题描述】:

所以我是 ASP 和 EF 的新手,我想知道如何执行这个令人难以置信的基本操作,以及一些问题。

目前我有一个表,我们将称之为 Resource;

class Resource
{
    int current;
    int min;
    int max;
};

现在我有默认的 CRUD 选项。我想要的是主列表上的一个 + / - 按钮,它将操纵每个资源的当前值并更新数据库和屏幕上的值。

我还想对选定的一组资源运行某些操作,例如“AddFive”。

所以我的问题;

  1. 我该怎么做?
  2. 这是可扩展的吗?如果有人不断按下按钮,这显然会向我的数据库发送大量请求。有没有办法限制这种影响?
  3. 我有哪些替代方案?

谢谢。

编辑: 澄清问题;这是我的帖子功能。如何/在哪里添加这些在我的视图中以获取显示每个资源的按钮。我只想让动作触发并刷新值,而不是重定向到新页面。

@Html.ActionLink("+", "Increment", new { id = item.ID })

public void Increment(int? id)
{
    if (id != null)
    {
        Movie movie = db.Movies.Find(id);
        if (movie != null)
        {
            Increment(movie);
        }
    }
}

[HttpPost, ActionName("Increment")]
[ValidateAntiForgeryToken]
public ActionResult Increment([Bind(Include = "ID,Title,ReleaseDate,Genre,Price")] Resource resource)
{
    if ((resource.Current + 1) < (resource.Max))
        resource.Current++;
    return View(resource);
}

【问题讨论】:

  • 请向我们展示您需要帮助的具体代码,并在您的帖子中只问一个问题。
  • @CountZero 他们都是同一个问题的一部分;如何使用按钮增加/减少值。除非您想查看预生成的 CRUD 代码,否则我没有代码可显示?
  • 您是否尝试过在控制器上创建“加五”方法?我们可以帮助解决特定的代码问题,但提供超出 SO 范围的完整解决方案。 stackoverflow.com/help/how-to-ask - 我们非常乐意提供帮助,但这个问题太笼统了。
  • @CodeZero 我已经用我的增量/减量帖子更新了条目。只是为了确认; Bind(Include="Current") 意味着它只会发布当前值而不会发布其他值?
  • 想我知道你在问什么。现在将示例应用程序放在一起。

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

听起来您遇到的主要问题是在前端创建电影列表并更新特定电影的详细信息。

这里的关键是您需要围绕每个项目包装一个表单并将该表单发布到您的更新控制器,或者使用 ajax / jquery 来调用控制器。

我已经给你举了第一个例子。一旦更新控制器被点击,它将重定向到列表页面,然后显示更新的电影列表。

下面是一个如何连接它的最小工作示例。为简洁起见,我没有包含任何数据访问代码,但在 cmets 中包含了伪代码以向您展示放置它的位置。

如果您还有其他问题,请告诉我。

控制器

public class MoviesController : Controller
{
    public ViewResult Index()
    {
        // Data access and mapping of domain to vm entities here. 
        var movieListModel = new MovieListModel();
        return View(movieListModel);
    }

    public ActionResult Increment(IncrementMovieCountModel model)
    {
        // Put breakpoint here and you can check the value are correct
        var incrementValue = model.IncrementValue;
        var movieId = model.MovieId;

        // Update movie using entity framework here
        // var movie = db.Movies.Find(id);
        // movie.Number = movie.Number + model.IncrementValue;
        // db.Movies.Save(movie);

        // Now we have updated the movie we can go back to the index to list them out with incremented number
        return RedirectToAction("Index");
    }

}

查看

@model WebApplication1.Models.MovieListModel
@{
    ViewBag.Title = "Index";
}

<h2>Some Movies</h2>


    <table>
        <tr>
            <td>Id</td>
            <td>Name</td>
            <td>Increment Value</td>
            <td></td>
        </tr>

        @foreach (var movie in Model.MovieList)
        {
            using (Html.BeginForm("Increment", "Movies", FormMethod.Post))
            {
                 <tr>
                     <td>@movie.Id @Html.Hidden("MovieId", movie.Id)</td>
                     <td>@movie.Name</td>
                     <td>@Html.TextBox("IncrementValue", movie.IncrementValue)</td>
                     <td><input type="submit" name="Update Movie"/></td>
                 </tr>
             }
        }
    </table>

模型

  public class MovieListModel
    {
        public MovieListModel()
        {
            MovieList = new List<MovieModel> {new MovieModel{Id=1,Name = "Apocalypse Now",IncrementValue = 3}, new MovieModel {Id = 2,Name = "Three Lions", IncrementValue = 7} };
        }

        public List<MovieModel> MovieList { get; set; }
    }

    public class MovieModel
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public int IncrementValue { get; set; }
    }

    public class IncrementMovieCountModel
    {
        public int IncrementValue { get; set; }
        public int MovieId { get; set; }
    }

【讨论】:

  • 我对您的示例进行了一些修改,以使其适合我当前的格式。我应该已经提到我已经将所有内容都打印到了一张桌子上。你几乎已经有了我想要的东西,而不是输入框,我只想打印文本,并且按钮“+”应该将值增加一个数字(更新静态条目和数据库 - css-tricks.com/wp-content/csstricks-uploads/…)。奇怪的是,提交 btn 似乎实际上并没有做任何事情,增量方法也没有断点,所以我怀疑它没有触发。
  • 我实际上设法让它工作,但如果我想动态更改变量,我不知道该怎么做,这对我现在的需求来说很好。非常感谢!
  • 乐于助人。通过动态更改变量,我假设您的意思是将值增加 1,5 或 X。根据我的经验,我遇到过几次的整个场景最好由 JQuery 提供。输入值的动态更新和发布到服务器。查看 Jquery / AJAX / JQuery Validate and Editor Templates 以获得真正干净的解决方案。很高兴我让你开始了。祝你好运!
  • 在不回发服务器的情况下添加那些“+”和“-”按钮功能的最简洁方法。
  • 这会让你开始。 mikesdotnetting.com/article/220/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多