2016-10-22 2 views
-1

こんにちは私はセールスビジットと呼ばれる1つのビューがあります。そのビューでは、私は2つのテキストボックスを持っていますFromDateTodate。 FromDateとTodateを選択して[OK]ボタンをクリックすると、コントローラ内のSalesVisitのアクションをポストする日付が渡されます。mvc5の同じビューでアクションの結果を取得して表示する方法は?

コントローラでは、1つの値は日付基準によって異なります。今私は、私がコントローラ内のポストアクションで計算した結果を同じビューで表示したいと思います。例えば、下の画像に示されています。私は2つのテキストボックスを持っている上の画像で

Example View

私は、日付と、2つの日付から選択し、[OK]ボタンは、それがコントローラに日付を渡すと、コントローラに、それはいくつかの値を計算する意味クリックして、再びそれをしなければならない場合結果を同じビューに渡します。 例:上記の画像では、値が2つのボックス(赤い色のボックス)を描画します。

マイモデル(ダッシュボードビューモデル)

public class DashboardViewmodel 
    { 
    public List<CustomerTypeCountModel> CustomerTypesCountModels { get; set;} 
    public List<View_VisitorsForm> Visits { get; set; } 
    public CustomerTypeViewModel CustomerTypeViewModels { get; set; } 
    public int sizingcount { get; set; } 
    public int Processingcount { get; set; } 
} 

私のコントローラコード

 public ActionResult SalesVisit() 
     { 
     return View(); 
     } 
    [HttpPost] 
    public ActionResult GetDatesFromSalesVisit(DashboardViewmodel dvm) 
    { 

     var fromdate = Convert.ToDateTime(dvm.CustomerTypeViewModels.FromDate); 
     var todate = Convert.ToDateTime(dvm.CustomerTypeViewModels.ToDate); 

     var userID = System.Web.HttpContext.Current.Session["UserID"].ToString(); 
     var objEmpDepUTID = db.UserRightsSettings.Where(u => u.UserID.ToString() == userID).Select(e => new 
     { 
      objemployeeID = e.EmployeeID, 
      objdepartmentID = e.DepartmentID, 
      objusertypeID = e.UserTypeID 
     }).FirstOrDefault(); 

     var EmployeeID = objEmpDepUTID.objemployeeID; 
     var DepartmentID = objEmpDepUTID.objdepartmentID; 
     var UserTypeID = objEmpDepUTID.objusertypeID; 
     var processingdeptid = (from d in db.Departments where d.DisplayName == "Processing" select d.DepartmentID).FirstOrDefault(); 
     var sizingdeptid = (from d in db.Departments where d.DisplayName == "Sizing" select d.DepartmentID).FirstOrDefault(); 

     List<View_VisitorsForm> objsizingcount = new List<View_VisitorsForm>(); 
     List<View_VisitorsForm> objprocessingcount = new List<View_VisitorsForm>(); 

     if (DepartmentID == new Guid("47D2C992-1CB6-44AA-91CA-6AA3C338447E") && 
      (UserTypeID == new Guid("106D02CC-7DC2-42BF-AC6F-D683ADDC1824") || 
      (UserTypeID == new Guid("B3728982-0016-4562-BF73-E9B8B99BD501")))) 
     { 
      var sizingview_visitorsforms = db.View_VisitorsForm.Where(x => x.EmpDepID == processingdeptid && x.VisitingDate >= fromdate 
       && x.VisitingDate <= todate).ToList(); 
      var processingview_visitorsform = db.View_VisitorsForm.Where(x => x.EmpDepID == sizingdeptid && x.VisitingDate >= fromdate 
       && x.VisitingDate <= todate).ToList(); 

      objsizingcount = sizingview_visitorsforms; 
      objprocessingcount = processingview_visitorsform; 
     } 
     DashboardViewmodel obj = new DashboardViewmodel(); 
     obj.sizingcount = objsizingcount.Count(); 
     obj.Processingcount = objprocessingcount.Count(); 
     return View("SalesVisit", obj); 
    } 

マイビューコード

@model CostToWafe.Areas.Sales.Models.DashboardViewmodel 
    @using CostToWafe.Areas.Sales.Models 
    @{ 
    ViewBag.Title = "SalesVisit"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 

    @using (Html.BeginForm("GetDatesFromSalesVisit","AdminDashboard")) 
    { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
    <body> 
    <div class="col-sm-3"> 
    <div class="form-group"> 
    @Html.Label("From Date") 
    @Html.TextBoxFor(m => m.CustomerTypeViewModels.FromDate, new { @class = "form-control", id = "FromDate" }) 
    </div> 
    </div> 

    <div class="col-sm-3"> 
    <div class="form-group"> 
    @Html.Label("To Date") 
    @Html.TextBoxFor(m => m.CustomerTypeViewModels.ToDate, new { @class = "form-control", id = "ToDate" }) 
    </div> 
    </div> 

私はパーシャルビューを試しましたが、オブジェクトのインスタンスにエラーが設定されていないオブジェクト参照が表示されています。私は私の問題を理解するのに最善の努力をしました。私の問題を理解し、この問題を解決するのに役立ちます。

ありがとうございました。

+0

あなたが同じページに滞在したい場合は、値を投稿しa'PartialViewResult'または 'JsonResult'を返し、返された結果とDOMを更新するために、AJAXを使用しています。 –

+0

@StephenMueckeどのような例ですか? –

+0

ウェブには数千の例があります:) –

答えて

1

Html.BeginFormの代わりにAjax.BeginFormを使用してみてください。

@using (Ajax.BeginForm("GetDatesFromSalesVisit", "AdminDashboard", new AjaxOptions { 
    UpdateTargetId = "visitDiv" 
} 

これをビューに追加すると、結果が部分的に表示されます。

@Html.Partial("_sales") 

次に、コントローラからPartialViewResultを返します。

return PartialView("_sales", obj); 

パーシャルビュー_salesを作成し、内部にdivをモデルデータとともに配置します。

<div id="visitDiv"> 
    @model.sizingcount 
</div> 
+0

私は試してみました –

+0

Janne私はこのコードをビューのトップに宣言していますか?(Ajax.BeginForm( "GetDatesFromSalesVisit"、 "AdminDashboard"、新しいAjaxOptions { UpdateTargetId = "visitDiv" )疑問私はその本文のテキストフィールドコードを書く必要がありますこのAjax.Beginformまたはousideの内部? –

+0

Janne私はあなたが言ったように試みたが、私は1つのHTMLエラーが表示されますが、それは表示されません任意のエラー..エラーは下の画像に言及されています。 https://i.stack.imgur.com/SmpSf.jpg https://i.stack.imgur.com/bKX65.jpg小切手を持って、私が何をしたのか教えてください –

関連する問題