我正在自学asp .net mvc3。我有一个“添加属性”表单,允许用户将属性详细信息上传到网站。我已经为这个错误苦苦挣扎了很长时间。
为简化起见,假设我的数据库中有两个表。
CustomerTypes:数据库有 1 个所有者、2 个代理、3 个商业等属性:这是由表单填充的表。
我使用 CustomerTypes(和其他此类表)来创建单选按钮。用户填写表格并选择“客户类型”选项。但是,我在提交时收到“对象引用未设置为对象的实例”错误。这是因为为 Model.CustomerTypes 设置了“null”。但是,Model.CustomerTypes 仅用于创建单选按钮。我不确定出了什么问题。代码如下:
看法:
@model Website.ViewModels.AddPropertyViewModel
<fieldset>
<legend>Property</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Property.CustomerType)
@foreach (var item in Model.CustomerTypes)
{
@Html.RadioButtonFor(model => model.Property.CustomerType, Convert.ToInt32(item.Value)) @item.Text
}
</div>
...
添加属性视图模型:
namespace Website.ViewModels
{
public class AddPropertyViewModel
{
public Property Property { get; set; }
...
public IEnumerable<SelectListItem> CustomerTypes { get; set; }
...
}
控制器:
public ActionResult AddProperty()
{
AddPropertyViewModel viewModel = new AddPropertyViewModel
{
...
CustomerTypes = websiterepository.GetCustomerTypeSelectList(),
...
};
return View(viewModel);
GetCustomerTypeSelectList 函数是:
public IEnumerable<SelectListItem> GetCustomerTypeSelectList()
{
var customerTypes = from p in db.CustomerType
orderby p.CustomerTypeDescription
select new SelectListItem
{
Text = p.CustomerTypeDescription,
Value = SqlFunctions.StringConvert((double)p.CustomerTypeId)
};
return customerTypes;
}
POST 中的值根据选择正确设置为 Property_CustomerType
--- 添加了更多信息 --- 我将表格开头为:
@using (Html.BeginForm("AddProperty", "Property", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
...
}
控制器是:
[HttpPost]
public ActionResult AddProperty(AddPropertyViewModel viewModel)
{
if (ModelState.IsValid)
{
//
if (viewModel.File1.ContentLength > 0)
{
var fileName = Path.GetFileName(viewModel.File1.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data"), fileName);
viewModel.File1.SaveAs(path);
}
var property = viewModel.Property;
websiterepository.Add(property);
return RedirectToAction("Index", "Home");
}
return View(viewModel);
}
这是错误的屏幕截图:
我已经尝试提交评论这些单选按钮的表单并且它有效。