2011-05-06 14 views
2

だ、私はページ上のラジオボタンの2つのグループを持っている場合は提出の上に永続化されない:ラジオボタンがありますエラー

Phone 1: [ ] Home | [x] Work | [ ] Cell 
Phone 2: [ ] Home | [ ] Work | [x] Cell 

ページが表示されたら、私は電話1のデフォルトを設定しています、「仕事」、電話2の場合、「セル」。何が起こっているのは、ユーザが提出し、必要なファーストネームを入力しなかったときに、がホーム(電話1用)とホーム(電話2用)を選択したとき - ページが更新されたときに電話1が「ホーム」で、細胞"。

これはどのようにですか?電話2は、エラーメッセージが表示される前に選択したものであるため、「ホーム」にする必要があります。どんなフィードバックも大歓迎です!ここで

[HttpPost]  
public ActionResult Create(ClientUser x) 
{ 
    try 
    {  
    return View("Index", x); 
    } 
    catch 
    { 
    return View(); 
    } 
} 

はモデルです:

@using (Html.BeginForm("create", "PetSittingRequest")) 
{ 

    <label class="labelleft" style="width: 100px">First Name:</label> 
    <div class="formfield" style="width: 205px">   
    @Html.TextBoxFor(model => model.ClientDetails[0].NameFirst, new { style = "width: 195px" }) 
    @Html.ValidationMessageFor(model => model.ClientDetails[0].NameFirst, null)  
    </div> 


    // Phone #1 START 
    <label class="labelleft" style="width: 100px">Phone 1:</label> 
    <div class="formfield" style="width: 60px">  
    @Html.TextBoxFor(model => model.Phones[0].PhoneNumber, new { style = "width: 195px" }) 
    @Html.ValidationMessageFor(model => model.Phones[0].PhoneNumber, null) 
    </div> 
    <div class="formfield" style="width: 60px"></div> 
    <div class="formfield" style="width: 95px"></div> 

    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[0].Location, "Home", new { @class="radiobtn" }) Home 
    </div> 
    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[0].Location, "Work", new { @class="radiobtn", @checked = true }) Work 
    </div> 
    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[0].Location, "Cell", new { @class="radiobtn" }) Cell 
    </div> 


// Phone #2 START 
    <label class="labelleft" style="width: 100px">Phone 2:</label> 
    <div class="formfield" style="width: 60px">  
    @Html.TextBoxFor(model => model.Phones[1].PhoneNumber, new { style = "width: 195px" }) 
    @Html.ValidationMessageFor(model => model.Phones[1].PhoneNumber, null) 
    </div> 
    <div class="formfield" style="width: 60px"></div> 
    <div class="formfield" style="width: 95px"></div> 

    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[1].Location, "Home", new { @class="radiobtn" }) Home 
    </div> 
    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[1].Location, "Work", new { @class="radiobtn" }) Work 
    </div> 
    <div class="formfield" style="width: 60px">  
    @Html.RadioButtonFor(model => model.Phones[1].Location, "Cell", new { @class="radiobtn", @checked = true }) Cell 
    </div> 
} 

ポストを扱うコントローラがこれです:ここで

は、ビューの

public class ClientUser 
{ 
    public List<ClientDetail> ClientDetails { get; set; }  
    public List<Phone> Phones { get; set; } 
} 

public class ClientDetail 
{  
    [Required(ErrorMessage="This field is required.")] 
    public string NameFirst { get; set; } 
} 

public class Phone 
{ 
    [Required(ErrorMessage="This field is required.")] 
    public string PhoneNumber { get; set; } 

    [Required(ErrorMessage="This field is required.")] 
    public string Location { get; set; } 
} 

答えて

0

問題は、片側のhtml属性を使用してラジオの値をチェックし、反対側でモデル値に同じ値を設定したい場合アウエー。だから、各ラジオボタンの表示から@checked = trueを削除するだけで、最初のフォームがレンダリングされるときに特定の値を選択する必要がある場合は、

public ActionResult Create() 
     { 
      ClientUser clientUser = new ClientUser(); 
      clientUser.ClientDetails = new List<ClientDetail> { new ClientDetail()}; 
      clientUser.Phones = new List<Phone> { new Phone{Location = "Work"}, new Phone{Location = "Cell"} }; 
      return View(clientUser); 
     } 

これは、最初のラジオグループの値を「仕事」に設定し、2番目のグループを「セル」に設定し、フォームに変更を加えたときに値を変更し、エラーが発生した場合にレンダリングします。さらに、フォーム上に1人のユーザーしか表示していないときに、なぜclientDetailsのリストを持っていますか?あなたのビューモデルを に変更することをお勧めします。public class ClientUser

{ 
    public ClientDetail ClientDetails { get; set; }  
    public List<Phone> Phones { get; set; } 
} 
+0

恐ろしいです!あなたの答えはトリックであり、理にかなっています。 ClientDetailsに関して、このコードは私が持っているもののシンプルなバージョンです。私が取り組んでいるアプリケーションでは、ユーザーはClientDetailsの異なるセットを持っています。デフォルトでは、ユーザーが情報を提出すると、ClientDetailsの最初のセットが保存されますが、さらに多くの情報が含まれる可能性があります。 – SaltProgrammer

関連する問題