私は自分自身にasp.netmvc3を教えています。ユーザーがプロパティの詳細をWebサイトにアップロードできる「プロパティの追加」フォームがあります。私は長い間このエラーに苦しんでいます。
簡単にするために、データベースに2つのテーブルがあると考えてみましょう。
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>
...
AddPropertyViewModel:
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);
}
エラーのスクリーンショットは次のとおりです。
これらのラジオボタンにコメントするフォームを送信してみましたが、機能します。