0

警告:这是我的第一个网络应用程序。

我有 4 个模型、视图和控制器。让我们称它们为 A、B、C、D(例如 ModelA、ControllerA、ViewA)。它们都是带有列表脚手架的基本视图。

/ControllerA/Index

用户从 ViewA 开始并选择第一项,将用户重定向到 ViewB

/ControllerB/Function?Aid=1

ViewB 显示另一个基于 ViewA 选择的列表。然后用户再次选择被重定向到 ViewC

/ControllerC/Function?Aid=1&Bid=2

ViewC 显示基于 ViewA 和 ViewB 的选择的另一个列表。然后用户再次选择被重定向到 ViewD。

/ControllerD/Function?Aid=1&Bid=2&Cid=3

ViewD 根据来自 ViewA、ViewB 和 ViewC 的选择显示另一个列表,然后用户再次选择。

此时我想发布 Aid、Bid、Cid 和 Did 并将它们保存在我的数据库中。理想情况下,用户会点击链接,数据会被发布,然后网站会将用户重定向回主页。我应该创建另一个模型和控制器来处理帖子吗?我曾想过尝试从 controllerD 进行 POST,但这似乎不是正确的方法。

msdn 教程仅显示直接从具有强类型模型的视图中发布。我有点卡住了,我不想把这弄得一团糟。

编辑代码 控制器

  public ActionResult myFunction(int Aid = 0, int Bid, int Cid)
        {

           //query D stuff here


            if (D == null)
            {
                return HttpNotFound();
            }
            return View(D.ToList());



        }

        [HttpPost]
        [InitializeSimpleMembership]
        public ActionResult CreateQuote(int Aid, int Bid, int Cid, int Did)
        {
            Quote myQuote = new Quote();
            myQuote.Customer_ID_FK = (int)Membership.GetUser().ProviderUserKey;
            myQuote.A_ID_FK = Aid;
            myQuote.B_ID_FK = Bid;
            myQuote.C_ID_FK = Cid;
            myQuote.D_ID_FK = Did;

            if (ModelState.IsValid)
            {
                db.Quotes.Add(myQuote);
                db.SaveChanges();
                db.Quotes.Max();
                int mymax = db.Quotes.Max(q => q.ID);


                return RedirectToAction();

            }


            return View(D.ToList());
        }
        [HttpPost]
        [InitializeSimpleMembership]
        public ActionResult CreateQuote(Quote myQuote)
        {
            myQuote.Customer_ID_FK = (int)Membership.GetUser().ProviderUserKey;
            if (ModelState.IsValid)
            {

                db.Quotes.Max();
                int mymax = db.Quotes.Max(q => q.ID);
                db.Quotes.Add(myQuote);
                db.SaveChanges();

                return RedirectToAction();

            }

            return View(D.ToList());
        }
4

1 回答 1

1

将您的 post 处理程序放在与之相关的控制器中通常是有意义的。情况并非总是如此,因为有时创建一个新控制器来处理与特定任务相关的所有帖子会更有意义。您还应该了解控制器中的方法和控制器之间的区别。控制器只是一个类,它继承自System.Web.Mvc.Controller并且可以像任何其他类一样具有方法。一个完全合理的控制器可能如下所示:

public class DController : Controller
{

    //GET /d
    public ActionResult Index()
    {
        //MyModel is a class that would contain the logic to display
        //the selections from A, B, and C
        var model = new MyModel();
        return View(model);
    }

    //POST /d/saveresults
    //We only want this method to accept POST
    [HttpPost]
    public ActionResult SaveResults(MyEntity data)
    {
        var model = new MyModel();
        model.SaveResultsToDatabase(data);

        return Redirect("/");
    }
}

控制器中最重要的是将逻辑处理保持在最低限度。在这里和那里使用 if 语句没有任何问题,但是您的大部分逻辑应该由您的模型处理。控制器主要用于在视图和模型之间传递数据。

于 2013-06-18T17:11:04.177 回答