繁体   English   中英

ASP.NET MVC中POST上的空值

[英]Null value on POST in ASP.NET MVC

我正在学习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,即视图不发布值,错误在哪里?

当前Id是您班级的一个字段,没有GETTER / SETTER属性/ methods。

字段通常用于在类内部内部存储数据(这些字段将具有默认-私有可见性)。 通常,将通过其他公共属性或方法来设置/读取字段的值。 使用C#属性 ,这要容易得多。如果要允许字段可读可写,则可以创建一个公共属性,例如

public int Age {set;get;}

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

使用setget将字段Id更改为属性,以便ModelBinder可以从发布的表单数据中设置值。

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

同样,C#通常使用PascalCasing。 所以我建议您将id属性更改为Id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM