MVC新增

本文介绍了在MVC框架中进行数据新增的操作步骤,包括控制器中的新增方法、查重逻辑、数据验证以及页面交互。强调了逻辑思维在编写新增功能中的重要性,如防止空数据和重复数据的新增,以及新增失败和成功的提示。通过实践可以提升开发者对逻辑判断的理解和应用。

作者:HZY
学习MVC我们经常需要使用到的就是新增、修改、删除、查询,下面来说明一下如何写新增代码,
首先到控制器写好新增方法,然后再去页面写接收方法,下面先来说控制器的方法,
新增数据,我们需要符合逻辑,例如判断 是否可以新增空数据,新增的数据是否与之前重复!
这些都是必不可少的,如果没有逻辑思维的判断,数据库内容就会崩溃。所以需要增强自己的逻辑思维,把需求和判断编写完整!
下面就是控制器的新增代码

	  public ActionResult InsertTrademark(D_Brand Brand)
          {     ReturnJson returnJson = new ReturnJson();
                    int oldCount = (from tbBrand in myModels.D_Brand  where tbBrand.BrandName == Brand.BrandName select tbBrand).Count();
                    if (oldCount == 0)
                    {  myModels.D_Brand.Add(Brand);
                        if (myModels.SaveChanges()>0)
                        {   returnJson.State = true;
                            returnJson.Text = "保存成功!";
}
                        else
                        {   returnJson.State = false;
                            returnJson.Text = "保存失败!";
}
                    }
            else
                    {returnJson.State = false;
                     returnJson.Text = "和以前的重复";
                    }
            return Json(returnJson, JsonRequestBehavior.AllowGet);   } 

下面来分析下上面新增代码,首先写了一个查重判断,判断新增的数据是否数据库已经存在,如果它不存在,便执行新增方法 myModels.D_Brand.Add(Brand);这句也就是新增必不可少的代码。
然后在判断数据库数据是否产生变化,如果产生变化便弹出新增成功的提示,反之便弹出新增失败的提示!这些提示都是符合逻辑的,都是必不可少的。上面代码还可以完善,写一个判断页面传输过来的数据是否为空的判断,这样便能使得空数据不能保存。写完控制器的方法之后就要到页面去写方法了。
首先点击新增清空input框,使得能填写新增数据,

            $("#BrandName").prop('readonly', '')
            $("#BrandName").val('')
            $("#bc").attr("onclick", "savaInsert()")

然后点击保存便能调用控制器写的新增方法,保存按钮需要在点击新增的时候才能开启点击。使用Post请求控制器的方法,填写路径。页面还需要判断新增保存是否为空,新增数据为空便不执行保存,提示请把信息填写完整。这样新增方法便完成。
下面来看一下效果
在这里插入图片描述
这便是点击了添加,任何没有输入添加数据,直接点保存提示的错误,请填写完整。
在这里插入图片描述
如果想新增一个新品牌,新增成功之后也会有提示
在这里插入图片描述
这样便新增成功了一个名为Adidas的品牌。
这个便是新增重复,新增了重复数据便会提示重复。
这些都是必不可少的提示,这就体现了逻辑思维,根据需求的实际情况,编写判断条件。
这样才能做出合理的新增,合理的功能。
多加练习便能增强自己的逻辑思维能力!

<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、付费专栏及课程。

余额充值