我遇到的问题显然很简单,但我在SO和Google中找到的所有答案都不适用。
我正在为现有系统创建MVC页面,这需要:
jobId
和parentId
。TempData
不是选项。所以,我有一个Index()方法,它根据来自DB的两个参数和数据构建模型。
public ActionResult Index(int jobId, int? parentId = null)
{
//build model based on Id params
var model = new JobModel
{
...
};
return View(model);
}
视图上有几个表单,允许在模型上执行一些操作(添加文件,删除文件)
@using (Html.BeginForm("AddNewFiles", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
{
@Html.HiddenFor(m => m.JobId)
@Html.HiddenFor(m => m.ParentId)
@Html.TextBoxFor(m => m.AdditionalFiles, new {type = "file", multiple = "true"})
@Html.ValidationMessageFor(m => m.AdditionalFiles)
<input type="submit" name="SubmitNewFiles" id="SubmitNewFiles" value="Upload"/>
}
提交此表格会让我转到正确的邮政行动
[HttpPost]
public ActionResult AddNewFiles(JobModel jobModel)
{
if (!ModelState.IsValid)
{
throw new InvalidDataException(message: "Model is invalid");
}
//doing some stuff with the files here
//...
//now I want to get back to the initial page with forms etc, however show a temporary label somewhere saying that 'something happened OK'
return RedirectToAction("Index", routeValues: new RouteValueDictionary(values: new
{
jobId = job.Id,
parentId = job.OrganizationId
}));
}
现在,问题在于我不知道如何在页面上显示消息。
正如我所说,我不能使用TempData
(这是50%的建议答案)。
其他解决方案包括return View("Index")
而非return RedirectToAction("Index")
- 但在这种情况下,我不知道如何为Index(int jobId, int? parentId = null)
方法传递正确的参数,以便更新模型可以生成。
我刚刚开始使用MVC所以我认为答案非常简单,但是我发现所有的东西都不适用于我的情况。干杯!
答案 0 :(得分:2)
如果不使用TempData,您有几个选择:
在目标操作上获得消息或id后,您可以使用ViewBag,ViewData或Model本身将该信息提供给视图。
答案 1 :(得分:0)
你可以采取两种方式:
ViewBag 使用ViewBag
动态对象设置邮件。在您要在其中设置消息的控制器中:ViewBag.EnterANameForYourMessage = "your message string here";
ViewBag在Controller和View之间传递,是一个动态对象,您可以在其中添加任何类型的任何属性名称。 是但是,建议您在使用/再次解析它们时确切知道这些类型是什么。
然后在View上,检查`ViewBag.EnterANameForYourMessage'对象是否为null(或使用'!string.IsNullOrWhiteSpace()'方法)。如果不是,则显示div中的值。
OR
模型在Controller / View之间传递的对象中添加某种“message”string
属性。
在解析消息的地方,将您的字符串添加到“message”属性中。
然后,像以前一样将模型返回到视图。
我在应用程序中这样做,所以我正在使用的方法可能有点过时(早期,我不记得我头顶的确切名称)。
希望这有帮助!
答案 2 :(得分:0)
带参数的重定向
return RedirectToAction("Action", new { id = 10});
处理ActionResult中的参数并设置模型的消息。
public ActionResult Action(int id)
{
if(id == 10)
{
Model.Message = "Success";
}
return View(Model);
}
模型,
public class ViewModel
{
public string Message { get; set; }
}
然后在View中显示它。 在视图中
<p> @Model.Message </p>