2013-02-13 49 views
0

我想通过使用MVC根据用户输入startdateenddate在图表中显示在特定日期范围内找到的数据。为了实现这一点,我需要json数据。 我可以根据用户输入获取json数据,但无法看到图表,因为我无法使用url:Machines/ParameterMVC:在视图中使用控制器数据

index.cshtml

<body> 

@using (Html.BeginForm("Parameter", "Machines", FormMethod.Post)) 
{ 
<div> 

    Start Date: <input type="datetime" id="start" name="start" /> 

    End Date: <input type="datetime" id="end" name="end" /> 

</div> 
<input type="submit" value="OK" /> 
Html.EndForm();} 

MachinesController.cs

public ActionResult Index() 
{ 
    return View(); 

} 


public ActionResult Parameter(DateTime start, DateTime end) 
{ 
    MachinesSql a = new MachinesSql(); 

    var data = Json(a.SqlAccessParameter(start, end), JsonRequestBehavior.AllowGet); 

    return View(data); 

} 

MODEL:Machines.cs

namespace DenemeReport.Models 
{ 


public class Machines 
{ 
    [Key] 
    public int AutoKey; 
    public string MachineGroup; 
    public DateTime StartDate; 
    public DateTime EndDate; 
    public int Duration; 

} 
public class MachinesDBContext : DbContext 
{ 
    public DbSet<Machines> Machine { get; set; } 

} 

public List<Machines> SqlAccessParameter(DateTime startDate, DateTime endDate) 
{ 

    SqlConnection myConnection = new SqlConnection(connstr); 
    myConnection.Open(); 
    SqlCommand myCommand = new SqlCommand("DateRange",myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myCommand.Parameters.Add("@SP_startDate", SqlDbType.DateTime).Value =startDate; 
    myCommand.Parameters.Add("@SP_endDate", SqlDbType.DateTime).Value = endDate; 

    SqlDataAdapter dataAdapter = new SqlDataAdapter(); 
    myCommand.ExecuteNonQuery(); 
    dataAdapter.SelectCommand = myCommand; 

    DataSet dSet = new DataSet(); 
    dataAdapter.Fill(dSet); 

    myConnection.Close(); 

    List<Machines> machinePost = new List<Machines>(); 
    foreach (DataRow row in dSet.Tables[0].Rows) 
    { 
     Machines mac = new Machines(); 
     mac.AutoKey = (int)row["AUTOKEY"]; 
     mac.MachineGroup = (string)row["MACHINEGROUP"]; 
     mac.Duration = (int)row["DURATION"]; 
     mac.StartDate = (DateTime)row["STARTTIME"]; 
     mac.EndDate = (DateTime)row["ENDTIME"]; 
     machinePost.Add(mac); 
    } 
    return machinePost; 
} 

Parameter.cshtml(信息查看参数操作包含图表信息)

<title>Intro</title> 

<script src="~/Scripts/jquery-1.8.3.min.js"></script> 
<script src="~/Scripts/kendo/kendo.all.min.js"></script> 
<link href="~/Scripts/kendo/kendo.common.min.css" rel="stylesheet" /> 
<link href="~/Scripts/kendo/kendo.default.min.css" rel="stylesheet" /> 

</head> 

<div id="chart"></div> 
<div id="chart2"></div> 
<body> 

<script> 

$("#chart").kendoChart 
    ({ 
     theme: $(document).data("kendoSkin") || "default", 
     title: { 
      text: "Pie Chart Test" 
     }, 
     legend: { 
      position: "bottom", 
     }, 

     dataSource: 
      { 

       transport: 
        { 
         read: 
          { 
           url: "Machines/Parameter", // This part create the problem I think. The url does not work. 
            dataType: "json", 
            contentType: 'application/json; charset=utf-8' 
           } 


        } 
      }, 

     seriesDefaults: { 
      labels: { 
       visible: true, 
       format: "{0}" 
      } 
     }, 

     series: [{ 

      type: "pie", 
      field: "Duration", 
      categoryField: "MachineGroup" 
     }], 

     tooltip: { 
      visible: true, 
      format: "{0}" 
     } 
    }); 
</script> 
</body> 
+0

我无法理解乌尔问题抱歉.. – Neel 2013-02-13 14:13:49

+1

你并不需要所有的'using'和'Html.EndForm()'。不知道这是否与你的问题有关,但“使用”块将隐含地关闭你的表格在结束括号处。如果您没有将'BeginForm()'放入'using'块中,您只需显式调用'EndForm()'。 – GalacticCowboy 2013-02-13 14:15:36

+0

@GalacticCowboy感谢您的回复,我尝试了您所说的,但没有奏效。也许问题的根源在于我不确定 – pln 2013-02-14 07:42:41

回答

1

假设你正在使用剃刀语法,替代"Machines/Parameter"通过"@Url.Action("Parameter", "Machines")"

+0

谢谢ken2k,但是我不能在kendo url属性中使用它,它给出了语法错误。 – pln 2013-02-14 07:46:41

+0

我解决了语法错误,但它仍然不起作用 – pln 2013-02-14 08:19:04

+0

@pln你是什么意思的“它不工作”?你的控制器动作是否被执行您是否检查过您的请求所针对的是哪个网址? – ken2k 2013-02-14 09:08:43

相关问题