技术开发 频道

MVC框架开发Web论坛之表单校验篇

  创建一个新产品的视图将从Home控制器中返回。列表2中提供了该Home控制器的完整代码。
  列表2–Controllers\HomeController.cs

using System;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;
using LinqToSqlExtensions;
using Microsoft.Web.Mvc;
using MvcFakes;
using MvcValidation;
using MvcValidationWebsite.Models;

namespace MvcValidationWebsite.Controllers
{
    [HandleError]
    
public class HomeController : Controller
    {
        
private IDataContext _dataContext;
        
private ITable<Product> _products;

        
public HomeController()
        {
            _dataContext
= new DataContextWrapper("conProductsDB", "~/Models/ProductsDB.xml");
            _products
= _dataContext.GetTable<Product>();
        }

        
public ActionResult Index()
        {
            
return View("Index", _products.ToList());
        }


        [AcceptVerbs(
"GET")]
        
public ActionResult Create()
        {
            
return View("Create");
        }
        
        [AcceptVerbs(
"POST")]
        
public ActionResult Create(FormCollection form)
        {
            
// Perform validation
            Validation.Validate<Product>(ViewData.ModelState, form);
            
if (!ViewData.ModelState.IsValid)
                
return View("Create", form);

            
// Create product
            var product = new Product();
            product.Name
= form["name"];
            product.Price
= Decimal.Parse(form["price"], NumberStyles.Currency);
            product.Description
= form["description"];
            
if (!String.IsNullOrEmpty(form["saleStartDate"]))
                product.SaleStartDate
= DateTime.Parse(form["saleStartDate"]);
            
if (!String.IsNullOrEmpty(form["saleEndDate"]))          
                product.SaleEndDate
= DateTime.Parse(form["saleEndDate"]);

            
// Insert product into database
            _dataContext.Insert(product);

            
// Redirect
            return RedirectToAction("Index");
        }

    }
}

  注意,上面的这个Home控制器中定义了两个Create()行为。在实现一个HTTP GET操作时调用第一个Create()行为。换句话说,当首次显示建一个新产品的表单时调用第一个Create()行为。

  接下来请注意,仅当实现一个HTTP POST操作时才调用第二个Create()行为。即当产品表单被寄送到服务器时就调用这个Create()行为。这第二个Create()方法负责校验表单数据;如果不存在校验错误,即把新的产品添加到服务器端数据库中。

0
相关文章