c# MVC 跳转页面

本文详细介绍了如何在Visual Studio中创建ASP.NET MVC4 WebApplication,并通过RouteConfig.cs文件配置默认路由。同时,展示了如何在Index.aspx和Add.aspx页面间进行跳转,包括使用JavaScript实现的跳转方式。

1)在VS中创建ASP.NET MVC 4 Web Application,在Project Template中选择Web API。

首先在Views\Home\中添加Add.aspx和Index.aspx

接下来我们将看的是系统默认首页Index.aspx和从Index.aspx跳转到Add.aspx

要看系统默认首页我们得看文件App_Start\RouteConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication15
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
从这段代码中我相信有代码基础的你不难看出来系统启动后默认调用是controller = "Home", action = "Index",

那我们就来看看Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication15.Controllers
{
    public class HomeController : Controller
    {
        //对应Views\Home\Index.aspx
        public ActionResult Index()
        {
            return View();
        }
        //对应Views\Home\Add.aspx
        public ActionResult Add()
        {
            return View();
        }
    }
}
相信大家看到这段代码后恍然大悟,系统将调用Views\Home\Index.aspx页面(个人认为是通过系统文件名来联系的)。

接下来我们来看看是如何通过Javascript来跳转页面的下面是Views\Home|Index.aspx页面的代码:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>Home Index</title>
    <script type="text/javascript" src="../../Scripts/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        $(function () {
            //js跳转页面(/controller/action)
            $('#jsTest').click(function () {
                window.location.href = '/Home/Add';
            });
        });
    </script>
</head>
<body>
    <div>
        <%--html跳转(/controller/action)--%>
        <a href="/Home/Add">Home Add</a>
        <input id="jsTest" type="button" value="Home Add" />
    </div>
</body>
</html>

当单击<a>或者<input>系统将跳转到Controllers\HomeController.cs中的Add方法,然后再跳转到Views\Home\Add.aspx页面。




<think>我们正在使用C#MVC框架创建一个新增页面MVC模式将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。创建新增页面通常涉及以下步骤: 1. 创建模型(Model):定义要新增的数据结构。 2. 创建视图(View):设计用户界面,供用户输入数据。 3. 创建控制器(Controller):处理用户提交的数据,进行验证和保存。 根据引用[1]和[2],新增页面的基本流程是:用户在视图页面输入数据,通过表单提交到控制器的某个动作方法,控制器处理数据(如检查重复等),然后保存到数据库。 下面我们逐步说明如何创建一个新增页面。 ### 步骤1:创建模型(Model) 假设我们要新增一个产品(Product),首先在Models文件夹下创建一个Product类。 ```csharp public class Product { public int Id { get; set; } [Required] public string Name { get; set; } public decimal Price { get; set; } // 其他属性... } ``` ### 步骤2:创建控制器(Controller) 在Controllers文件夹下创建控制器(如ProductsController),并添加两个动作方法:一个用于显示新增表单(GET),另一个用于处理表单提交(POST)。 ```csharp public class ProductsController : Controller { // 显示新增表单 public ActionResult Create() { return View(); } // 处理表单提交 [HttpPost] public ActionResult Create(Product product) { if (ModelState.IsValid) { // 检查重复(根据引用[1]) // 这里假设我们有一个数据库上下文_db,通过它来检查重复 if (_db.Products.Any(p => p.Name == product.Name)) { ModelState.AddModelError("Name", "产品名称已存在"); return View(product); } // 保存到数据库 _db.Products.Add(product); _db.SaveChanges(); // 保存成功后重定向,比如到列表页 return RedirectToAction("Index"); } return View(product); } } ``` ### 步骤3:创建视图(View) 在Views/Products文件夹下创建Create.cshtml视图文件。 ```html @model YourNamespace.Models.Product <h2>新增产品</h2> @using (Html.BeginForm("Create", "Products", FormMethod.Post)) { @Html.AntiForgeryToken() <div class="form-group"> @Html.LabelFor(model => model.Name) @Html.TextBoxFor(model => model.Name, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Name) </div> <div class="form-group"> @Html.LabelFor(model => model.Price) @Html.TextBoxFor(model => model.Price, new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.Price) </div> <button type="submit" class="btn btn-primary">提交</button> } ``` ### 步骤4:配置路由 通常,MVC框架默认的路由配置已经可以处理这样的URL:`/Products/Create`。 ### 步骤5:处理重复检查(参考引用[1]) 在控制器的POST方法中,我们检查了产品名称是否重复。如果重复,则向模型状态添加错误,并返回当前视图,显示错误信息。 ### 步骤6:前端验证(可选) 我们可以使用jQuery验证插件来增强前端验证,MVC默认的视图模板已经包含了这些脚本。 ### 注意事项 - 在保存之前,一定要进行模型状态验证(ModelState.IsValid)和业务规则验证(如重复检查)。 - 为了防止跨站请求伪造(CSRF)攻击,使用`@Html.AntiForgeryToken()`并在控制器方法上添加`[ValidateAntiForgeryToken]`属性(虽然示例中省略了,但建议加上)。 ### 引用说明 根据引用[1],新增数据时需要检查重复,我们在控制器中实现了这一逻辑。引用[2]展示了使用表单提交数据,以及使用Ajax提交的方式。如果需要使用Ajax提交,可以参考引用[2]中的JavaScript代码。 §§相关问题§§ 1.C# MVC中如何实现数据验证? 2. 如何使用Ajax提交表单而不刷新页面? 3.MVC中如何实现文件上传功能?</think>在 C# MVC 框架中创建新增页面需要遵循 MVC 模式(模型-视图-控制器),主要步骤如下: ### 步骤 1:创建模型(Model) 定义数据实体类,表示要新增的数据结构: ```csharp // Models/Product.cs public class Product { public int Id { get; set; } [Required(ErrorMessage = "产品名称必填")] [StringLength(100)] public string Name { get; set; } [Range(0, 10000, ErrorMessage = "价格必须在0-10000之间")] public decimal Price { get; set; } public DateTime CreateTime { get; set; } = DateTime.Now; } ``` ### 步骤 2:创建控制器(Controller) 添加处理新增逻辑的控制器方法: ```csharp // Controllers/ProductController.cs public class ProductController : Controller { private readonly AppDbContext _db; // 数据库上下文 // GET: 显示新增表单 public ActionResult Create() { return View(); // 返回空表单视图 } // POST: 处理表单提交 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(Product product) { if (ModelState.IsValid) { // 检查重复(参考引用[1]) if (!_db.Products.Any(p => p.Name == product.Name)) { _db.Products.Add(product); _db.SaveChanges(); return RedirectToAction("Index"); // 成功跳转到列表页 } ModelState.AddModelError("", "产品名称已存在"); } return View(product); // 验证失败返回表单 } } ``` ### 步骤 3:创建视图(View) 在 `Views/Product/Create.cshtml` 中创建表单: ```html @model YourProject.Models.Product <h2>新增产品</h2> @using (Html.BeginForm("Create", "Product", FormMethod.Post)) { @Html.AntiForgeryToken() <div class="form-group"> @Html.LabelFor(m => m.Name) @Html.TextBoxFor(m => m.Name, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Name) </div> <div class="form-group"> @Html.LabelFor(m => m.Price) @Html.TextBoxFor(m => m.Price, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Price) </div> <button type="submit" class="btn btn-primary">保存</button> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) } ``` ### 关键实现说明 1. **重复检查**:在控制器中通过 `Any()` 方法检查数据是否重复(参考引用[1]) 2. **表单验证**: - 使用 `[Required]`、`[Range]` 等数据注解 - 前端通过 `@Html.ValidationMessageFor` 显示错误信息 3. **安全机制**: - `[ValidateAntiForgeryToken]` 防止 CSRF 攻击 - `@Html.AntiForgeryToken()` 生成令牌 4. **数据保存**: - 通过 Entity Framework 的 `Add()` 和 `SaveChanges()` 保存数据 - 成功后重定向防止重复提交 ### 多模块扩展建议(参考引用[4][5]) 对于大型项目: 1. 将业务逻辑封装在服务层(Service Layer) 2. 使用接口隔离实现(如 `IProductService`) 3. 通过依赖注入注册服务: ```csharp // Startup.cs services.AddScoped<IProductService, ProductService>(); ``` ### 前端交互优化(参考引用[2]) 如需使用 AJAX 提交: ```javascript function saveProduct() { $.ajax({ url: '/Product/Create', type: 'POST', data: $('#productForm').serialize(), success: function(response) { if(response.success) { alert("新增成功!"); } } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值