Свойства объекта привязки модели получает NULL при передаче при переадресации на другой метод действий [дубликат]

43
задан Amit 14 November 2015 в 13:39
поделиться

5 ответов

Использование TempData

Представляет набор данных, который сохраняется только с одного запроса на следующий

[HttpPost]
public ActionResult FillStudent(Student student1)
{
    TempData["student"]= new Student();
    return RedirectToAction("GetStudent","Student");
}

[HttpGet]
public ActionResult GetStudent(Student passedStd)
{
    Student std=(Student)TempData["student"];
    return View();
}

Альтернативный путь Передача данных с помощью строки запроса

return RedirectToAction("GetStudent","Student", new {Name="John", Class="clsz"});

Это приведет к генерации запроса GET, например Student/GetStudent?Name=John & Class=clsz

Убедитесь, что метод, который вы хотите перенаправить, украшен [HttpGet], поскольку вышеупомянутое RedirectToAction выдаст запрос GET с кодом статуса HTTP 302 Найдено (общий способ выполнения перенаправления URL)

54
ответ дан Murali Murugesan 5 September 2018 в 09:44
поделиться

Я нашел что-то вроде этого, помогает избавиться от жестко закодированных тегов tempdata

public class AccountController : Controller
{
    [HttpGet]
    public ActionResult Index(IndexPresentationModel model)
    {
        return View(model);
    }

    [HttpPost]
    public ActionResult Save(SaveUpdateModel model)
    {
        // save the information

        var presentationModel = new IndexPresentationModel();

        presentationModel.Message = model.Message;

        return this.RedirectToAction(c => c.Index(presentationModel));
    }
}
-3
ответ дан DiSaSteR 5 September 2018 в 09:44
поделиться
  [HttpPost]
    public async Task<ActionResult> Capture(string imageData)
    {                      
        if (imageData.Length > 0)
        {
            var imageBytes = Convert.FromBase64String(imageData);
            using (var stream = new MemoryStream(imageBytes))
            {
                var result = (JsonResult)await IdentifyFace(stream);
                var serializer = new JavaScriptSerializer();
                var faceRecon = serializer.Deserialize<FaceIdentity>(serializer.Serialize(result.Data));

                if (faceRecon.Success) return RedirectToAction("Index", "Auth", new { param = serializer.Serialize(result.Data) });

            }
        }

        return Json(new { success = false, responseText = "Der opstod en fejl - Intet billede, manglede data." }, JsonRequestBehavior.AllowGet);

    }


// GET: Auth
    [HttpGet]
    public ActionResult Index(string param)
    {
        var serializer = new JavaScriptSerializer();
        var faceRecon = serializer.Deserialize<FaceIdentity>(param);


        return View(faceRecon);
    }
0
ответ дан hansen.palle 5 September 2018 в 09:44
поделиться

Да, вы можете передать модель, которую вы показали с помощью

return RedirectToAction("GetStudent", "Student", student1 );

, предполагая, что student1 является экземпляром Student

, который будет генерировать следующий URL-адрес (при условии, что вы используете маршруты по умолчанию и значение student1: ID=4 и Name="Amit")

.../Student/GetStudent/4?Name=Amit

Внутренне метод RedirectToAction() создает RouteValueDictionary на используя значение .ToString() каждого свойства в модели. Однако привязка будет работать только в том случае, если все свойства в модели являются простыми свойствами, и она терпит неудачу, если какие-либо свойства являются сложными объектами или наборами, потому что метод не использует рекурсию. Если, например, Student содержит свойство List<string> Subjects, то это свойство приведет к строковому значению запроса

....&Subjects=System.Collections.Generic.List'1[System.String]

, и привязка завершится неудачно, и это свойство будет null

8
ответ дан Stephen Muecke 5 September 2018 в 09:44
поделиться

Просто вызовите действие без необходимости для redirect to action или ключевого слова new для модели.

 [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return GetStudent(student1); //this will also work
    }
    public ActionResult GetStudent(Student student)
    {
        return View(student);
    }
28
ответ дан Vinay Pratap Singh 5 September 2018 в 09:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: