【问题标题】:why whenever I fill the form MembershipType value comes as null value?为什么每当我填写表单 MembershipType 值时都会出现空值?
【发布时间】:2019-11-17 09:52:17
【问题描述】:

参数字典包含参数 'membershipTypeId' 的 null 条目,该参数是不可为空的类型 'System.Int32',用于方法 'System.Web.Mvc.ActionResult CustomerForm(Int32, System.String, Boolean, Int32)' in ' WebApplication2.Controllers.CustomerController'。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数

我的客户类与membershipType 类具有多对一关系:

  public class Customer
    {
        public Customer()
        {
            this.Movies = new HashSet<Movie>();
        }
        public int id { get; set; }
        [Required]
        [StringLength(255)]
        public String Name { get; set; }
        public bool IsSubscribedToNewsletter { get; set; }
        public int CurrentMembershipTypeId { get; set; }
        public MembershipType CurrentMembershipType { get; set;}
        public ICollection<Movie> Movies { get; set; }
    }

我的 MembershipType 类:

 public class MembershipType
    {
        public int Id { get; set; }
        public short SignupFee { get; set; }
        public byte DurationInMonths { get; set; }
        public byte DiscountRate { get; set; }
        public ICollection<Customer> Customers { get; set; }

        // public virtual ICollection<Movie> Movie { get; set; }
    }

我的客户控制器: 获取客户表单的功能:

 public ActionResult CustomerForm(Customer customer)
        {
            var membershipTypes = iMembershipTypeRepository.GetMembershipTypes();
            ViewBag.Message = "Customers form is going to display: ";
            if (customer.IsSubscribedToNewsletter != true)
                ViewBag.Addon = "Selected";
            else
                ViewBag.Addon = "Not Selected";
            return View(membershipTypes);
        }

客户表单的发布操作:

[HttpPost]    
        public ActionResult CustomerForm(int CustomerId, string CustomerName, bool CustomerisSubscribedToNewsLetter, int membershipTypeId)

            {

                Customer customer = new Customer();

                customer.id = CustomerId;

                customer.Name = CustomerName;

                customer.IsSubscribedToNewsletter = CustomerisSubscribedToNewsLetter;
                customer.CurrentMembershipTypeId = membershipTypeId;

                iCustomerRepository.InsertCustomer(customer);

                iCustomerRepository.Save();

                return RedirectToAction("Customer");

            }

客户窗体视图:

<h2>CustomerForm</h2>

<form action="/Customer/CustomerForm" method="post">
    <table>
        <tr>
            <td>Id:</td>
            <td><input id="CustomerId" type="text" name="CustomerId" /></td>
        </tr>
        <tr>
            <td>Name:</td>
            <td><input id="CustomerName" type="text" name="CustomerName" /></td>
        </tr>
        <tr>
            <td>IsSubscribedToNewLetter:</td>
            <td><input id="CustomerisSubscribedToNewsLetter" type="text" name="CustomerisSubscribedToNewsLetter" /></td>
        </tr>
        <tr>
            <td>MembershipType:</td>
            <td>
                <select id="MembershipTypeId" name="MembershipTypes">
                    @foreach (var membershipType in @Model)
                    {
                        <option value=@membershipType.Id>
                            @*@membershipType.SignupFee*@
                            @membershipType.Id
                        </option>
                    }
                </select>
            </td>
        </tr>

    </table>
    <input type="submit" value="save"/>
</form>

【问题讨论】:

    标签: html asp.net-mvc razor


    【解决方案1】:

    您的select 定义如下:

    <select id="MembershipTypeId" name="MembershipTypes">
    

    name 属性定义发送到服务器的结果的名称。它是 MembershipTypes,但您的后端代码需要 MembershipTypeId。因为它没有给出,所以没有值,并且不可为空的值类型需要一个值。

    更改name 属性或后端的参数名称以使其匹配。

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 2016-09-11
      • 2022-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多