MVC-4改变ViewBag.消息在服务器端

本文关键字:服务器端 消息 ViewBag 改变 MVC-4 | 更新日期: 2023-09-27 18:13:44

我是MVC编码初学者。
当应用程序启动时,ViewBag。消息为:选择要上传的文件

上传成功后变为:File上载成功!

是否有一种方法,我可以使它返回并显示"选择一个文件上传"消息约5秒后再次,不使用任何javascript ?我想如果mvc有一些内置的时间函数,我可以使用也许?

https://github.com/xoxotw/mvc_fileUploader

我的观点:

@{
    ViewBag.Title = "FileUpload";
}
<h2>FileUpload</h2>
<h3>Upload a File:</h3>

    @using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
    { 
        @Html.ValidationSummary();
        <input type="file" name="fileToUpload" /><br />
        <input type="submit" name="Submit" value="upload" />  
        @ViewBag.Message
    }

我的控制器:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Mvc_fileUploader.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = "Choose a file to upload!";
            return View("FileUpload");
        }
        [HttpPost]
        public ActionResult FileUpload(HttpPostedFileBase fileToUpload)
        {
            if (ModelState.IsValid)
            {
                if (fileToUpload != null && fileToUpload.ContentLength > (1024 * 1024 * 1))  // 1MB limit
                {
                    ModelState.AddModelError("fileToUpload", "Your file is to large. Maximum size allowed is 1MB !");
                }
                else
                {
                    string fileName = Path.GetFileName(fileToUpload.FileName);
                    string directory = Server.MapPath("~/fileUploads/");
                    if (!Directory.Exists(directory))
                    {
                        Directory.CreateDirectory(directory);
                    }
                    string path = Path.Combine(directory, fileName);
                    fileToUpload.SaveAs(path);
                    ModelState.Clear();
                    ViewBag.Message = "File uploaded successfully!";
                }
            }
                return View("FileUpload");
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your app description page.";
            return View();
        }
        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }
    }
}

MVC-4改变ViewBag.消息在服务器端

简短的回答是No。我猜因为你是"新人",你想把重点放在MVC部分,但MVC和JavaScript是非常相互关联的,认为客户端(JavaScript)和服务器(MVC),你应该真正掌握这两者,以做出好的网站。

正常情况下,服务器不会向浏览器触发事件,而是由浏览器发出请求。有一些方法可以让服务器使用SignalR之类的东西在客户端上引发事件,但在这种情况下,这将是多余的。

最后……你试图实现的是客户端操作,即通知用户做某事。如果你在MVC中这样做,你会浪费网络带宽并增加延迟(认为服务器调用是昂贵的),而实际上它是一个客户端操作,因此应该在JavaScript中完成。

不要回避JavaScript。拥抱它。看看JQuery,它为您省去了很多繁重的工作。