你调用的对象是空的。

时间:2013-05-11 08:41:25

标签: asp.net-mvc asp.net-mvc-4 razor

我有3个型号: 第一个:

public class CreateFieldModel
{

        public FieldModel fm { get; set; }
        public CategoryModel cm { get; set; }
}

第二个:

public class FieldModel
    {
        public string field_Name { get; set; }
        public InputTypeModel itm { get; set; }
        public string input1 { get; set; }
        public string input2 { get; set; }
        public string input3 { get; set; }
        public string input4 { get; set; }

        public List<InputTypeModel> inputs { get; set; }
    }

第三名:

 public class InputTypeModel
    {
        public string inputTypeName { get; set; }
        public string inputTypeDesc { get; set; }

    }

2种方法:

第一名:

public List<InputTypeModel> getInputTypes()
        {
            var inptypes = edu.InputTypes;

            List<InputTypeModel> listInputTypes = new List<InputTypeModel>();
            foreach (var inpType in inptypes)
            {
                listInputTypes.Add(new InputTypeModel { inputTypeName = inpType.Input_Type_Name, inputTypeDesc = inpType.Input_Type_Description });
            }

            return listInputTypes;
        }

当这个方法执行时,listInputTypes有三个不同的值..我通过调试来检查..所以这里没有roblem。这个方法属于FormManagement类。我从以下操作方法调用此方法:

[HttpGet]
    public ActionResult createNewField(CreateFieldModel cfm, string fcode)
    {
        FormManagement ffm = new FormManagement();
        cfm.fm.inputs = ffm.getInputTypes();
        return View(cfm);

    }

cfm.fm.inputs = ffm.getInputTypes();执行时,它显示“对象引用未设置为对象的实例”。消息......我对mvc很初学..请帮忙

1 个答案:

答案 0 :(得分:0)

在你的行动中不知道你真正希望用cfm-parameter实现什么,我唯一可以建议的是在分配之前检查空引用并创建新实例:

[HttpGet]
public ActionResult createNewField(CreateFieldModel cfm, string fcode)
{
    FormManagement ffm = new FormManagement();
    if (cfm == null)
    {
        cfm = new CreateFieldModel();
    }
    if (cfm.fm == null)
    {
        cfm.fm = new FieldModel();
    }
    cfm.fm.inputs = ffm.getInputTypes();
    return View(cfm);
}

当然,这假设您不依赖于通过路由参数传入的数据。如果你是,你需要检查为什么值没有被传入,但我猜你首先不需要它作为参数。