2016-07-11 4 views
0

最小限のコード構造MVC5:Viewは正しいビューモデルを提出していない

私は、コントローラ内のアクションメソッドがどのように見える2つのviewmodels cmsViewModelappointments

public partial class cmsViewModel 
    { 
     public string rows { get; set; } 
     public DateTime appt_date_time { get; set; } 
     public int appt_id { get; set; } 
     public List<community_meeting_schedule> lst { get; set; } 

     public cmsViewModel() 
     { 
      rows = null; 
      appt_date_time = DateTime.Today; 
      lst = null; 
      appt_id = -1; 

     } 

    } 



public partial class appointments 
    { 

     public int appt_client_id { get; set; } 
     public int customer_id { get; set; } 
     [Key] 
     public int appt_id { get; set; } 

     public DateTime appt_date_time { get; set; } 
     public DateTime time_stamp { get; set; } 
    } 

を持っている:

[HttpPost] 
     public ActionResult CMSConfim(cmsViewModel model, string Command) 
     { 

      return View("CMSchedule", model); 

     } 

見ますCMSConfim.cshtmlは次のようになります。

@model Scheduler_MVC.Models.cmsViewModel 
@using (Html.BeginForm("CMSConfim", "appointments", FormMethod.Post)) 

{ 


    @Html.HiddenFor(model => model.appt_id, new { id = "appt_id" }) 
    @Html.HiddenFor(model => model.appt_client_id, new { id = "appt_client_id" }) 
    @Html.HiddenFor(model => model.appt_date_time) 
    @Html.HiddenFor(model => model.appt_status) 
    @Html.HiddenFor(model => model.appt_type) 
    @Html.HiddenFor(model => model.lst) 

     <input type="submit" value="Back" id="backBtn" class="btn btn-default" /> 
     <input type="button" value="Submit" id="submitBtn" class="btn btn-default" style="display:inline-block;" /> 


} 

フォームの表示フィールドに正しい値を表示できると付け加えたいと思います。エラーは、フォームの送信中に表示されます。

エラー今

私はBackてフォームを送信します。次のエラーが表示されます。 辞書のモデルのタイプはです。「cmsViewModel」ですが、必要なタイプはです。「予定」 私が間違っている可能性があることをお勧めします。

+0

あなたの '[HttpGet]コントローラはどのように見えますか? – Gareth

+0

ありがとうございました。実際問題は、アクションの追加の「コマンド」引数が原因でした。ビューにクリックされたボタンを追跡するためにそれを含めました。それを取り除いた後はすべて正常に動作しますが、今はクリックされたボタンを追跡する方法を理解しようとしています。私は価値から隠された価値を送るべきですか? –

答えて

1

あなたのポストビューモデルのタイプは、 "予定" であるが、あなたのHtml.BeginFormもこのルートは、次の

public class AppointmentsController : Controller 
{ 
    public Action CMSConfirm(appointments model) 
    { 

    } 
} 

を期待している "AppointmentsController"

@using (Html.BeginForm("CMSConfim", "appointments", FormMethod.Post)) 

にルーティングされますコントローラー名が間違っている場合は、Html.BeginFormを更新してください。

matcが表示されません。パラメータ "Command"の場合はhです。

0

あなたはなぜあなたの剃刀sintax cmsViewModelを持っていますか?任命票を提出する予定ですが、cmsVMがあります。あなたのコントローラにもcmsVMが必要です。あなたはrazorでappointmentsVMを提供する必要があり、またあなたのコントローラでそれを期待する必要があります。

[HttpPost] 
    public ActionResult CMSConfim(appointments model, string Command) 
    { 

     return View("CMSchedule", model); 

    } 

または両方をコントローラで取得したい場合。

[HttpPost] 
    public ActionResult CMSConfim(cmsViewModel model, appointments appoint, string Command) 
    { 

     return View("CMSchedule", model); 

    } 
関連する問題