C# 表单提交时ViewModel为空

C# 表单提交时ViewModel为空,c#,asp.net-mvc-3,viewmodel,C#,Asp.net Mvc 3,Viewmodel,我要做的是创建一个子类别对象。为此,我制作了一个viewmodel,它将为我的视图提供nescesarry数据(包括子类别将绑定到的类别对象) 当我发布表单时,viewmodel将返回到我的控制器,但我的子类别和从dropdownlist中选择的值的所有属性都为空 我做错了什么 视图: 视图模型: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da

我要做的是创建一个子类别对象。为此,我制作了一个viewmodel,它将为我的视图提供nescesarry数据(包括子类别将绑定到的类别对象)

当我发布表单时,viewmodel将返回到我的控制器,但我的子类别和从dropdownlist中选择的值的所有属性都为空

我做错了什么

视图:

视图模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Web.Mvc;

namespace SkyLearn.Areas.Categories.Models
{
    public class CategoryViewModel
    {
        public List<SelectListItem> categories;
        public SubCategory subcategory;
        public string selectedCategory;

        public CategoryViewModel()
        {
            categories = new List<SelectListItem>();
            subcategory = new SubCategory();
            selectedCategory = "";
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Data.Entity;
使用System.Web.Mvc;
命名空间SkyLearn.Areas.Categories.Models
{
公共类类别视图模型
{
公开名单类别;
公共子类别子类别;
公共字符串selectedCategory;
公共类别视图模型()
{
类别=新列表();
子类别=新的子类别();
selectedCategory=“”;
}
}
}

viewmodel包含一个类别列表,我尝试创建的子类别可以绑定到这些类别。它还包含一个子类别对象,我可以使用它创建子类别。最后一个属性是我要用于绑定dropdownlist中的选项的字符串。

ASP.Net MVC3的SelectListItem的行为与您预期的不同。另外,尝试使用Html.DropDownListFor()而不是Html.EditorFor()来创建下拉列表

在视图模型中:

public IList<string> PossibleValues {get; set;}
public string SelectedValue {get; set;}
@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.PossibleValues))
这将自动生成下拉列表并将其绑定到模型。如果需要,也可以将默认值和其他自定义设置传递到此Html帮助器函数中

保存其他值 您可以保存其他值,这些值用户不应选择编辑,但如果用户确实进行编辑,则这些值不是任务关键型的

@Html.HiddenFor(m => m.RememberThisValue);
请记住,该值是隐藏的,不显示,但仍然可以在DOM上编辑,并发布用户想要的任何内容。确保通过检查POST的隐藏值来保护自己免受恶意的值注入


在服务器端存储所有重要信息,通过模型将散列/私钥传递给用户,并实现一个静态会话字典来存储这些少量信息

我正在使用Html.DropDownListFor。此外,dropdownlist帮助器接受的唯一来源是selectItem列表。因此,这样做会导致错误。是否有其他方法将我的其余属性绑定到模型?感谢您的回复,我成功地将selectedvalue发布到submit上。如何用视图中的正确值填充viewmodel的其余部分对我来说仍然是个谜。有什么评论吗?是的,你说得对。我修复了我的示例,并添加了关于其余值的答案。可能是帖子:,帮助您获得默认模型绑定。我已经阅读了关于该主题的大部分帖子。我可能错了,但我认为我已经有了输入字段(html.editorfor)并使用了正确的名称来绑定它。我是mvc的新手,所以我可能又一次完全错了。我必须羞愧地承认,我忘记了一些简单的事情,比如添加Get;设置现在一切都好了。唉。谢谢你的帮助
@Html.DropDownListFor(x => x.SelectedValue, new SelectList(Model.PossibleValues))
@Html.HiddenFor(m => m.RememberThisValue);