我目前在控制器中有一个方法,它接受表单集合,保存数据,然后在"详细信息"页面中显示数据.目前,代码看起来像:

[HttpPost]
public ActionResult Create(PersonModel person)
{
    if (person.IsValid())
    {
        person.additionalData = "Person created successfully";
        return View("Details", person);
    }
}

问题是,以这种方式返回Details视图会保留URL mysite/Person/Create——理想情况下,我希望URL是mysite/Person/Details/{PersonId}.

我相信这一定是可能的.显然,我需要回应.重定向,但是这不允许我将模型传递给视图.据我所知,我不能通过使用RedirectToAction的模型?

谢谢你的帮助.

编辑:确认-创建操作生成的模型与详细信息操作创建的默认模型不同.因此,直接重定向到Action并传递ID不起作用,因为生成的模型不正确.为了提供更多上下文,Create操作中的模型包含一个附加值,说明‘Person Created Successful’,如果我重定向到Details操作,此消息不会出现在模型中.

推荐答案

直接从我自己的应用程序:

public ActionResult Create(Booking item)
{
    if (ModelState.IsValid)
    {
        int newID = _tasks.Create(item);
        // NEW section to emulate model being populated for use in Details view
        TempData["additionalData"] = "Person created successfully";
        return RedirectToAction("Details", new { id = newID });
    }
    else
    {
        return View();
    }
}

那么,你的"细节"行动不能是这样的吗:

public ActionResult Details(int id)
{
    var item = _tasks.GetByKey(id);
    var additionalData = TempData["additionalData"];
    if(item != null) {
        if(additonalMessage!=null)
        {
            item.additionalData = additionalData;
        }
        return View(item);
    }
    else
        return View("Notfound");
}

你不能采取类似的方法吗??

您可以按照约定执行重定向,并设置一个标志(在tempdata上,如上所述)来给出此消息吗?tempadata标志只会在创建操作中设置,因此只会在创建新的"person"对象时发生.因此,"细节"操作只能作为"创建"操作的结果来显示它

Asp.net相关问答推荐

强制从 /bin 而不是 GAC 加载程序集?

如何在没有 Select 按钮的情况下在 GridView 中实现全行 Select ?

从 Request.Url.AbsolutePath 获取应用相对 url

如何删除字符串的定义部分?

如何在 GridView 单元格中的(即
)中呈现解码的 HTML

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

为什么 ASP.NET Identity 2.0 使用 GUID/字符串作为用户 ID?

我应该使用字节还是整数?

如何使用三个按钮是否和取消显示确认alert ,如 MS Word 中所示

相当于服务器端的 ASP.NET 包括

ASP.NET Core 中的授权. [Authorize] 属性总是 401 Unauthorized

在 IIS 上托管 ASP.NET 5 项目

为什么 Asp.Net Identity IdentityDbContext 是一个黑盒?

如何将枚举类型绑定到 DropDownList?

在 asp.net 中为动态 PDF 指定文件名

使用 Web.Config 转换的高级任务

在c#中显示带有换行符的标签文本

GZIP 与 DEFLATE 压缩相比有什么优势?

为什么 C# 对于 CSC 文件会遇到此错误?

在 Visual Studio 2013 中更改项目端口号