2013-03-11 41 views
1

我創建MVC中的一個項目,它使用的WebGrid來的ActionResult。在我的WebGrid有兩列分別狀態IsActive複選框的oncheck重定向MVC中

狀態欄只能包含兩個值:檢查選中。無論這些值來自數據庫。

的IsActive列具有複選框這是在選中狀態,如果狀態是在狀態列檢查,反之亦然。

我在我的控制器一個ActionResult它檢查特定行的地位和它反轉(即)如果狀態被檢查的話會變成氾濫,副versa.This是代碼:

public ActionResult Add(string path,string status) 
{ 
    on.Open(); 
    if (status == "unchecked") 
    { 
      SqlCommand cmd = new SqlCommand("SpAdRegister1", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@imagepath", path); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
    else 
    { 
     SqlCommand cmd = new SqlCommand("SpAddeRegister", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@imagepath", path); 
     cmd.ExecuteNonQuery(); 
    } 
    return RedirectToAction("Index", "Ad"); 
} 

在上面的代碼狀態爲相應的狀態列的值和路徑是在數據庫中定義的圖像的路徑。如果它被選中它,直到我取消它總是保持檢查

上面的代碼應該執行,當我選中/取消checkbox.Also複選框的狀態應該是永久性的(即)。

編輯 這是我得到的路徑值,並將其傳遞到視圖的方式:

public ActionResult Index() 
     { 

      SqlCommand cmd = new SqlCommand("select * from Cpecial_Ad_management_tbl where [Partner Name]='"+partname+"' ", con); 

      con.Open(); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      List<AddDetailModel> model = new List<AddDetailModel>(); 
      while (dr.Read()) 
      { 
       model.Add(new AddDetailModel() 
       { 

       AdName = dr["Ad_name"].ToString(), 
       AdType=dr["Ad_type_name"].ToString(), 
       PartnerName=dr["Partner Name"].ToString(), 
       hrefurl=dr["Ad_url"].ToString(), 
       startDate=dr["Start_date"].ToString(), 
       endDate = dr["End_date"].ToString(), 
       tagName = dr["Tag"].ToString(), 
       AdPath= dr["Ad_image_path"].ToString(), 
       Status = dr["Status"].ToString()    
       }); 
      } 
      dr.Close(); 

      return View(model); 
     } 

這裏AdPath是我用我的另一個控制器的路徑。

爲視圖編輯代碼:爲模型

@model IEnumerable<EShopPartnerSetting.Models.AddDetailModel> 

@{ 
    var grid1 = new WebGrid(source: Model.Where(m => m.AdType == "bottom_banner").ToArray(), 
               defaultSort: "First Name", 
               rowsPerPage: 2, fieldNamePrefix: "wg_", 
               canPage: true, canSort: true, 
               pageFieldName: "pg", sortFieldName: "srt" 
              ); 
    var grid2 = new WebGrid(source: Model.Where(m => m.AdType == "side_banner_bottom").ToArray(), 
    defaultSort: "First Name", 
    rowsPerPage: 2, fieldNamePrefix: "wg_", 
    canPage: true, canSort: true, 
    pageFieldName: "pg", sortFieldName: "srt" 
    ); 
    var grid3 = new WebGrid(source: Model.Where(m => m.AdType == "side_banner_top").ToArray(), 
    defaultSort: "First Name", 
    rowsPerPage: 2, fieldNamePrefix: "wg_", 
    canPage: true, canSort: true, 
    pageFieldName: "pg", sortFieldName: "srt" 
    ); 
} 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Ad Management</title> 
    <link href="../../CSS/AdminLayStyle.css" rel="stylesheet" type="text/css" /> 
    <link href="../../CSS/Content/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" /> 
    <link href="../../CSS/Content/themes/base/jquery.ui.all.css" rel="stylesheet" type="text/css" /> 
    <link href="../../CSS/Content/themes/base/jquery.ui.base.css" rel="stylesheet" type="text/css" /> 
    <link href="../../CSS/Content/themes/base/jquery.ui.dialog.css" rel="stylesheet" 
     type="text/css" /> 
    <script src="../../Scripts/jquery-1.7.1.js" type="text/javascript"></script> 
    <script src="../../Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $('input[name=chk]').change(function() { 

      var status; 
      if ($('input[name=chk]').is(':checked')) { 
       status = "checked" 
      } else { 
       status = "unchecked" 
      } 
      var path = @Model.AdPath; 
      alert(status); 
       sendRequest(path, status); 
     }); 
function sendRequest(path, status) { 
    $.get('@Url.Action("Add","Ad")' + '?path=' + path + '&status=' + status, function(){ 
     alert('calling the actionresult add'); 
    }).done(function(){ 
     //show an update on the page 
    }); 
} 

    <style type="text/css"> 
     some style 
    </style> 
</head> 
<body> 
    @using (Html.BeginForm(new { id = "target" })) 
    { 
     @Html.ValidationSummary(true) 
     <table width="960" border="0" align="center" cellpadding="0" cellspacing="0"> 
      <tr> 
       <td> 
        <div class="maindiv1"> 
         <div class="hd"> 
          <h3> 
           Ad Management</h3> 
         </div> 
         <div class="bd"> 
          <table align="center" cellpadding="0" cellspacing="0" width="100%"> 
           <tr> 
            <td> 
             <input id="new" type="button" value="Create New Ad" style="color: #FFFFFF; background-color: #1688C6;" /> 
            </td> 
           </tr> 
           <tr> 
            <td> 
             &nbsp; 
            </td> 
           </tr> 
           <tr> 
            <td align="center"> 
             <span><div style="background-color:#4FA6E4; width:680px;" >Bottom Banner</div></span> 
             @grid1.GetHtml(tableStyle: "listing-border", headerStyle: "gridhead", footerStyle: "paging", rowStyle: "td-dark", alternatingRowStyle: "td-light", 
          columns: 
           grid1.Columns(
           grid1.Column("AdName", "Ad/Campaign", style: "colProductid"), 
           grid1.Column(header: "Ad", format: @<text><img src="@item.AdPath" id="adimg" alt="YourText" title="Ad Image" width:"50px" height="50px"></text>, style: "colAdimage"), 
           grid1.Column("startDate", "Start Date", style: "colCategoryID"), 
           grid1.Column("endDate", "End Date", style: "colCategoryID"), 
            grid1.Column(header: "IsActive", format: @<text><input name="chk" class="chk2"(@item.Status)" type="checkbox" @item.Status/></text>, style: "colOperation"), 
            grid1.Column(header: "Edit", format: @<text><a id="@item.AdName" class="clk"><img 
            src="../../Images/edit.png" class="asa" width="25px" height="25px" alt="" style="border: none;" /></a></text>, style: "colOperation"), 
           grid1.Column(header: "Delete", format: @<text><a href="@Url.Action("Delete", "Ad", new { aname = item.AdName, apath = item.AdPath, status = item.Status })" onclick="javascript:return ConfirmDelete();"><img 
            src="../../Images/delete.png" width="20px" height="20px" alt="" style="border: none;" /></a></text>, style: "colOperation"), 
           grid1.Column(header: "Status", format: @<text> 
             </text>, style: "colOperation") 
             ), mode: WebGridPagerModes.All) 
            </td> 
           </tr> 
           <tr> 
            <td> 
             &nbsp; 
            </td> 
           </tr> 
           <tr> 
            <td width="100%" align="center"> 
             @* <input id="Submit1" type="submit" value="submit" />*@ 
            </td> 
           </tr> 
          </table> 
         </div> 
         <script type="text/javascript"> 
          function ConfirmDelete() { 
           return confirm("Are you sure you want to delete this?"); 
          } 
         </script> 
        </div> 
        @* <a id="clk">click here</a>*@ 
        <div id="dialog" title="Edit" style="overflow: hidden;"> 
        </div> 
        <div id="newdialog" title="Create" style="overflow: hidden;"> 
        </div> 
       </td> 
      </tr> 
     </table> 
    } 
</body> 
</html> 

代碼:

public class AddDetailModel 
    { 

    public string AdName { get; set; } 
    public string AdType { get; set; } 
    public string PartnerName { get; set; } 
    public string hrefurl { get; set; } 
    public string startDate { get; set; } 
    public string endDate { get; set; } 
    public string tagName { get; set; } 
    public string AdPath { get; set; } 
    public string BannerPath { get; set; } 
    public string Status { get; set; } 
    } 

所以基本上,問題是如何重定向到的ActionResult上覆選框的點擊,以及如何使的狀態複選框(選中/取消選中)基於數據庫中的某些值?

任何幫助將不勝感激。

public ActionResult Add(string path, string status) 
{ 
    //Execute your stored procedure. 

    //If successful 
    return Json(new { success = true }, JsonRequestBehaviours.AllowGet); 
} 

$('input[name=CheckBoxName]').change(function(){ 
    var path = //as your model type is IEnummerable<AddDetail> you will have to select it using javascript 
    var status = $(this).is(':checked') ? 'unchecked' : 'checked'; 
    sendRequest(path, status); 
}); 

function sendRequest(path, status) { 
    $.get('@Url.Action('Add')' + '?path=' + path + '&status=' + status, function(){ 
     alert('calling the actionresult add'); 
    }).done(function(){ 
     //show an update on the page 
    }); 
} 

在另一方面,考慮提取數據訪問代碼的不同:

回答

0

我終於找出答案。我使用複選框的onchange事件來調用一個javascript函數。 下面是代碼:

grid1.Column(header: "IsActive", format: @<text><input name="chk" class="chk2" value="@item.AdPath" type="checkbox" onchange="adchange('@item.AdType','@item.AdPath','@item.Status')" @item.Status/></text>, style: "colOperation"), 

以及JavaScript函數是:

 function adchange(id, path, status) { 

       $.get('@Url.Action("Add","Ad")' + '?ids=' + id + '&path=' + path + '&status=' +status); 
} 

由於GDP和達林他們用JavaScript代碼的幫助!

+0

這將是更好的連接你的onchange事件與jquery不顯眼,而不是污染你的HTML。 – gdp 2013-03-12 03:43:43

+0

你是什麼意思,污染的HTML? – nitinvertigo 2013-03-12 05:53:35

+0

你應該使用jquery連接你的事件處理程序:http://stackoverflow.com/questions/12627443/jquery-click-vs-onclick它更不顯眼,你不必添加JavaScript到你的html標籤 – gdp 2013-03-12 06:13:38

0

你可以,如果你修改添加操作結果與一個JSON結果返回某種類型的成功消息的用JavaScript做異步層。

+0

實際上路徑是模型中的參數。我從數據庫中獲取值並將其傳遞到視圖中。我已經添加了代碼來解釋它。 – nitinvertigo 2013-03-11 07:23:29

+0

那麼你可以使用razor @ Model.Path將其寫入頁面,並從那裏抓取它。如果你想重定向到頁面,請與達林斯答案一致,否則這將觸發行動並留在同一頁面上。 – gdp 2013-03-11 07:28:16

+0

我不想重定向到任何頁面。我希望它重定向到actionresult並返回到同一頁面。此外,如果我傳遞[email protected]我得到一個錯誤 – nitinvertigo 2013-03-11 07:36:24

1

一種可能性是使用JavaScript和訂閱change事件的複選框,然後重定向到該控制器的動作。例如,如果你使用jQuery,你可能會嘗試這樣的:

<script type="text/javascript"> 
    $(function() { 
     $('table input[type="checkbox"]').change(function() { 
      // determine the value of the status parameter based on whether 
      // the checkbox that we clicked on was checked or unchecked 
      var status = $(this).is(':checked') ? 'unchecked' : 'checked'; 

      // it's not quite clear where the path parameter should come from 
      // but if it shown somewhere in the table you could use a jQuery 
      // selector to retrieve it 
      var path = ...; 

      // calculate the url to redirect to 
      var url = '@Url.Action("Add")' + 
         '?path=' + encodeURIComponent(path) + 
         '&status' + encodeURIComponent(status); 

      // redirect 
      window.location.href = url; 
     }); 
    }); 
</script> 
+0

我不想重定向我的頁面。從您的代碼中可以看到,在執行Add方法後,用戶被重定向回到同一頁面 – nitinvertigo 2013-03-11 07:42:13

+0

是的,這很正常,可以讓您更新表格數據。 – 2013-03-11 07:51:43

+0

好吧..現在我遇到了問題,給路徑。我給[email protected],但我得到預期的表達式error.I已更新的問題與代碼查看 – nitinvertigo 2013-03-11 07:55:59