Как извлечь из объекта RouteData второй параметр, сохраненный при выполнении GET-запроса? - CodeHelper

Как извлечь из объекта RouteData второй параметр, сохраненный при выполнении GET-запроса?

2

Как извлечь из GET-запроса "addLine" параметр pid? Из RouteData "id" извлекается нормально, а "pid" не видит. Как можно решить этот вопрос? И рационально ли использование RouteData?

    [HttpGet]
    public ActionResult addLine(int id, int pid)
    {
        OrgForm newline = new OrgForm();
        TempData["curPer"] = pid; // для ссылки "Назад" в текущий период
        TempData["curFrm"] = id;  // для ссылки "Отмена"
        return PartialView("partAddInOrgForm", newline);
    }
    [HttpPost]
    public ActionResult addLine(OrgForm lineAdd)
    {

        int cfrm = Convert.ToInt32(RouteData.GetRequiredString("id"));
        Form frm = db.Forms.Where(f => f.formID == cfrm).First();
        lineAdd.Form = frm;
        //При извлечении второго параметра возникает ошибка
        //The RouteData must contain an item named 'pid' with a non-empty string value.
        int cper = Convert.ToInt32(RouteData.GetRequiredString("pid"));

        Period per = db.Periods.Where(p => p.perID == cper).First();
        lineAdd.Period= per;
        db.AddToOrgForms(lineAdd);
        db.SaveChanges();
        List<OrgForm> orgFrm = (from of in db.OrgForms where of.perID == cper && of.formID == cfrm orderby of.lineCod select of).ToList();
        return PartialView("partOrgForms", orgFrm);
    }

P.S. В ASP.NET и MVC опыта почти нету.

Лучший ответ:

2

Вручную из RouteData извлекать не обязательно, достаточно прописать эти параметры в аргументах метода:

    [HttpGet]
    public ActionResult addLine(int id, int pid)
    {
        OrgForm newline = new OrgForm();
        TempData["curPer"] = pid; // для ссылки "Назад" в текущий период
        TempData["curFrm"] = id;  // для ссылки "Отмена"
        return PartialView("partAddInOrgForm", newline);
    }

    [HttpPost]
    public ActionResult addLine(OrgForm lineAdd, int id, int pid)
    {

        int cfrm = id;
        Form frm = db.Forms.Where(f => f.formID == cfrm).First();
        lineAdd.Form = frm;
        int cper = pid;
        Period per = db.Periods.Where(p => p.perID == cper).First();
        lineAdd.FPeriorm d= fperm;
        db.AddToOrgForms(lineAdd);
        db.SaveChanges();
        List<OrgForm> orgFrm = (from of in db.OrgForms where of.perID == cper && of.formID == cfrm orderby of.lineCod select of).ToList();
        return PartialView("partOrgForms", orgFrm);
    }

Еще нужно убедиться, что параметр pid передаётся в POST-параметрах, т.к. если при извлечении pid вылетает подобная ошибка, то вероятно это значение вообще не было передано на сервер.

nel

Благодарю, все заработало! Действительно pid не передавался на сервер, исправил, теперь работает в обоих случаях.

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.