ユーザー名(テキストボックス)、電子メール(テキストボックス)、および除算(選択リスト)を表示する登録フォームがあります。名前と電子メールはあらかじめ設定されています(私はWindows認証、イントラネットアプリケーションを使用しています)。そして、DropDownからSelectedValueをInt32として私のコントローラに送りたいので、SelectList全体を戻したくありません。このリストは今は小さいですが、かなりの大きさに成長します。SelectList "SelectedValue"をコントローラアクションメソッドに渡す
私はRegistrationViewModel
というクラスには、これらのフィールドのパブリックプロパティが含まれています。しかし、私がDivisionListにSelectList
を使用すると、私はこのエラーを受け取ります:No parameterless constructor defined for this object.
。
Typeを変更しても問題はありませんが、Divisionはnullまたは0です。DropDownのSelectedValueをController ActionメソッドにInt32として渡す方法はありますか?
編集1:私は私がやっている、本当にわからないんだけど
、私は約48時間のMVCを使用してきた、PDF、開催されたTechEd、およびTechDaysのビデオを見ました。
私の謝罪は、ここに私のコントローラのコードである:ここではビューだ
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(RegistrationViewModel rvm)
{
IApplicationContext context = ContextRegistry.GetContext();
IValidationErrors errors = new ValidationErrors();
IValidator validator = (IValidator)context.GetObject("RegistrationValidator");
bool valid = validator.Validate(rvm, errors);
if (valid)
repo.SaveRegistration();
else
ViewData["DivisionList"] = repo.GetDivisions();
return View(rvm);
}
RegistrationViewModel
クラス
public class RegistrationViewModel
{
public string Name { get; set; }
public string Email { get; set; }
//public SelectList DivisionList { get; private set; }
public int Division { get; set; }
}
<%@ Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<RegistrationViewModel>" %>
<%@ Import Namespace="Project1.Entities"%>
<%@ Import Namespace="Project1.Models"%>
<asp:Content ID="registerTitle" ContentPlaceHolderID="TitleContent" runat="server">
Register
</asp:Content>
<asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server">
...
<% using (Html.BeginForm())
{ %>
<div>
<fieldset>
<legend>Account Information</legend>
<p>
<label for="name">Name:</label>
<%= Html.TextBox("Name", User.Identity.Name.GetDisplayName()) %>
<%= Html.ValidationMessage("username") %>
</p>
<p>
<label for="email">Email:</label>
<%= Html.TextBox("email", User.Identity.Name.GetEmailFromLogin()) %>
<%= Html.ValidationMessage("email") %>
</p>
<p>
<label for="division">Division:</label>
<%= Html.DropDownList("DivisionList", ViewData["DivisionList"] as SelectList)%>
<%= Html.ValidationMessage("confirmPassword") %>
</p>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
</div>
<% } %>
</asp:Content>
編集2:
エイロン:ここで私は私もそれを変更するものだ:
コントローラー:
public ActionResult Register()
{
ViewData["DivisionList"] = repo.GetDivisions();
return View();
}
ビュー:
<%= Html.DropDownList("DivisionValue", ViewData["DivisionList"] as SelectList)%>
私はこの例外を受け取る: なしのViewData項目はキータイプの 'DivisionValue'「IEnumerableをしてありません'
私はこれを見る更新時:
<%= Html.DropDownList("DivisionList", ViewData["DivisionList"] as SelectList)%>
をそれだけで素晴らしい作品!これは、「Division」のすべてのアイテムが同じ名前であれば機能するようです。名前を変更すると、Viewがクラッシュするか、ViewModelの "Division"プロパティが0として送信されます。
なぜですか? 、
public string DivisionValue { get; set; }
またはINTするタイプを変更したDateTime、または任意の適切なタイプがある:
コントローラのアクションコードをお知らせください。どのように電子メールテキストボックスの価値を渡していますか? – ichiban