如何在 MVC 中单击按钮时移至其他操作方法

Posted

技术标签:

【中文标题】如何在 MVC 中单击按钮时移至其他操作方法【英文标题】:How to move to other action method on button click in MVC 【发布时间】:2018-04-03 06:52:42 【问题描述】:

我制作了一个表单,用户可以在其中输入所有详细信息。就像填表一样。填完表格后。当用户单击保存按钮时,它应该自动移动到同一控制器中的其他操作方法。并且必须在 MVC 的 GRID VIEW 中显示数据。在网格视图中,用户可以在填写表格时更新和保存他输入的所有数据。 我使用了 DB 优先方法。并制作一个视图模型类。这是View Model类的代码。

public class ViewModel

    [Required(ErrorMessage = "Please Enter Prodcut Name")]
    [DisplayName("Product Name")]
    public string Product_Name  get; set; 
    [Required(ErrorMessage = "Please Choose Category")]
    public int SelectedValue  get; set; 
    [Required(ErrorMessage = "Enter Price")]
    [DisplayName("Enter Price")]
    public decimal Price  get; set; 
    [Required(ErrorMessage = "Choose Picture")]
    [DisplayName("Choose Picture")]
    public string Picture  get; set; 
    [Required(ErrorMessage = "Choos Country")]
    public Nullable<int> Country_ID  get; set; 
    [Required(ErrorMessage = "Choose Type")]
    [DisplayName("Choose Product Type")]
    public string Product_Type  get; set; 
    public SelectList CategoryList  get; set; 
    public SelectList CountryList  get; set; 
    [Required(ErrorMessage = "Select Date")]
    public DateTime Date  get; set; 

控制器代码

ProductionEntities DBContext = new ProductionEntities(); 

public ActionResult Index()

    ViewModel model = new ViewModel();

    List<tblCategory> CategoryList = DBContext.tblCategories.ToList();
    model.CategoryList = new SelectList(CategoryList, "Category_ID", "Category_Name");

    List<tblCountry> CountryList = DBContext.tblCountries.ToList();
    model.CountryList = new SelectList(CountryList, "Country_ID", "Country_Name");
    return View(model);


[HttpPost]
public ActionResult Index(ViewModel model)

    //ViewModel v = new ViewModel();
    //if (image1!=null)
    //
    //    model.Picture = new byte[image1.ContentLength];
    //    image1.InputStream.Read(model.Picture, 0, image1.ContentLength);
    //

    List<tblCategory> CategoryList = DBContext.tblCategories.ToList();
    model.CategoryList = new SelectList(CategoryList, "Category_ID", "Category_Name");
    List<tblCountry> CountryList = DBContext.tblCountries.ToList();
    model.CountryList = new SelectList(CountryList, "Country_ID", "Country_Name");
    if (!ModelState.IsValid)
    
        tblProduct product = new tblProduct();
        product.Category_ID = model.SelectedValue;
        product.Country_ID = model.Country_ID;
        product.Price = model.Price;
        product.Product_Name = model.Product_Name;
        product.Date = model.Date;
        product.Picture = model.Picture;
        product.Product_Type = model.Product_Type;
        try
        
            DBContext.tblProducts.Add(product);
            DBContext.SaveChanges();
        
        catch  (DbEntityValidationException dbEx)
        
            foreach (var validationErrors in dbEx.EntityValidationErrors)
            
                foreach (var validationError in validationErrors.ValidationErrors)
                
                    System.Console.WriteLine("Property: 0 Error: 1", validationError.PropertyName, validationError.ErrorMessage);
                
            
        
    
    return View(model);

【问题讨论】:

【参考方案1】:

您应该遵循 P-R-G (Post-Redirect-Get) 模式。成功保存记录后,向浏览器发送重定向响应,浏览器将向呈现表格数据的操作方法发出全新的 GET 请求。

DBContext.tblProducts.Add(product);
DBContext.SaveChanges();
return RedirectToAction("List");

在您的 List 操作方法中,您将读取表格数据所需的记录并将其呈现在其视图中。

【讨论】:

数据存入数据库后。当用户点击保存按钮。它应该使用他输入的所有数据自动移动到其他操作(下一页/视图),并且数据必须在网格视图中(填充)。他可以在哪里编辑或更新他的数据。 重定向将使浏览器向 List 操作发出新的 GET 请求,您必须在其中编写代码来读取显示和呈现它所需的数据。没有人会为您的全部要求编写代码。

以上是关于如何在 MVC 中单击按钮时移至其他操作方法的主要内容,如果未能解决你的问题,请参考以下文章

执行 AsyncTask 时移至其他活动

单击时移除 QPushButton 周围的方格边框

如何使用 java 脚本在 MVC 中单击按钮时调用相同的局部视图

在按钮单击时使用参数调用 mvc 操作 [重复]

android EditText,单击另一个对象时移除焦点

根据单击的提交按钮将表单发布到不同的 MVC 发布操作