如何通过RedirectToAction传递对象?

时间:2019-02-13 12:23:02

标签: c# asp.net-core asp.net-core-routing

我有一个SubmitComment动作和一个Message类。我想使用Message类来发送该操作是否成功完成,但是当我在Message.Result操作中检查它们时,Message.Text为false且ShowProduct为null。 / p>

public class Message
{
    public bool Result { get; set; }
    public string Text { get; set; }
}

我的SubmitCommen t操作:

public ActionResult SubmitComment(int productId, string comment, string nickName)
{
        try
        {
            var productCM = new ProductCM
            {
                //I make my prodcut comment object here
            };
            storesDB.ProductCMs.Add(productCM);
            storesDB.SaveChanges();

            Message message = new Message
            {
                Result = true,
                Text = "Your comment successfully registered."
            };

            return RedirectToAction("ShowProduct", new { id = productId, message });
        }
        catch (//if any exeption happend)
        {
            Message message = new Message
            {
                Result = false,
                Text = "Sorry your comment is not registered."
            };

            return RedirectToAction("ShowProduct", new { id = productId, message });
        }
}

我的ShowProduct操作:

public ActionResult ShowProduct(int? id, message)
{
    ViewBag.Message = message;

    var model = storesDB.Products;

    return View(model);
}

出什么问题了?

2 个答案:

答案 0 :(得分:1)

您不能使用RedirectToAction传递对象。另外,也可以使用return RedirectToAction("ShowProduct", new { id = productId, message })代替return ShowProduct(productId,message);,如下所示:

Message message = new Message
{
    Result = true,
    Text = "Your comment successfully registered."
};

return ShowProduct(productId,message);

答案 1 :(得分:0)

对于RedirectToAction,它将把参数作为查询字符串传递,而您不能传递嵌入的对象。

尝试指定

之类的属性
return RedirectToAction("ShowProduct", new { id = productId, message.Result, message.Text });

对于return ShowProduct(productId,message);,请指定

这样的ViewName
public ActionResult ShowProduct(int? id, Message message)
{
    ViewBag.Message = message;

    return View("ShowProduct");
}