Null value on POST in ASP.NET MVC

本文关键字:ASP NET MVC in POST value on Null | 更新日期: 2023-09-27 18:27:25

我正在学习ASP.NET MVC,遇到了以下问题。

视图"SelectProdotti"是

@model Models.SelectProdottiModel
@{
    ViewBag.Title = "Select Prodotti";
}
<h2>@ViewBag.Title</h2>
@using (Html.BeginForm("ProdottiToListino", "Listino", FormMethod.Post))
{ 

    @Html.HiddenFor(m => m.id)
    @Html.DisplayFor(m=> m.id)

    <input type="submit" value="Salva" />
}

加载视图的操作

public ActionResult SelectProdotti(int id)
        {

            SelectProdottiModel model = new SelectProdottiModel();
            model.id = id;         
            return View(model);
        }

型号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Models
{
    public class SelectProdottiModel
    {

        public int id;
        public SelectProdottiModel()
        {                
        }
    }
}

控制器中的后期操作

[HttpPost]
        public ActionResult ProdottiToListino(SelectProdottiModel model)
        {
            return RedirectToAction("SelectProdotti", "Listino", new {id = model.id });
        }

我写这个代码只是为了学习,没有用。问题是model.id总是0,即视图没有发布值,错误在哪里?

Null value on POST in ASP.NET MVC

当前Id是类中没有GETTER/SETTER属性/方法的字段。

字段通常用于在类内部存储数据(这些字段将具有默认的私有可见性)。通常,字段的值将通过另一个公共属性或方法设置/读取。有了C#属性,这就容易多了。如果你想让字段可读写,你可以创建一个像这样的公共属性

public int Age {set;get;}

当您从表单发布数据时,DefaultModelBinder(一个将表单数据映射到类对象的类)将尝试创建SelectProddottiModel类的对象,并尝试设置与发布的表单数据中表单项的名称匹配的公共属性的值。如果不使用set访问器将字段设置为公共属性,则模型绑定器无法设置该值。

将字段Id更改为具有setget的属性,以便ModelBinder可以根据已发布的表单数据设置值。

public class SelectProdottiModel
{
    public int id {set;get;}       
}

此外,C#通常使用PascalCasing。因此,我建议您将id属性更改为Id