2016年5月31日 星期二

C# MVC Validation Summary on Multiple Forms

參考文章:http://stackoverflow.com/questions/5342427/specify-validation-summary-on-multiple-forms

在同一個頁面裡有多個form時,怎麼指定驗證的訊息要顯示在哪個form裡?
@using (Html.BeginForm("update1", "form1"))
{
  if (Request.Form.AllKeys.Contains("btn1"))
  {
    @Html.ValidationSummary()
  }
                
  @Html.LabelFor(m => m.PointA1)
  @Html.TextBoxFor(m => m.PointA1)

  @Html.LabelFor(m => m.PointB1)
  @Html.TextBoxFor(m => m.PointB1)
                    
  <br />
  <input type="submit" name="btn1" value="確定" /> 
}

@using (Html.BeginForm("update2", "form2"))
{
  if (Request.Form.AllKeys.Contains("btn2"))
  {
    @Html.ValidationSummary()
  }
                
  @Html.LabelFor(m => m.PointA2)
  @Html.TextBoxFor(m => m.PointA2)

  @Html.LabelFor(m => m.PointB2)
  @Html.TextBoxFor(m => m.PointB2)
                    
  <br />
  <input type="submit" name="btn2" value="確定" /> 
}
利用submit的name就好嘍!

2016年5月6日 星期五

C# MVC Read CSV 亂碼問題

csv:big5編碼
Web:utf8編碼

導致檔案讀取中文時會變亂碼,其實只要一個簡單的步驟就能解決了。
//原:
var dataList = new CsvReader(new StreamReader(path)).GetRecords<FunUpload>().ToList();
//修改後:
var dataList = new CsvReader(new StreamReader(path, Encoding.Default)).GetRecords<FunUpload>().ToList();

這樣就能正確讀到中文嘍!

2016年5月3日 星期二

Cloud9-RoR-Shopping Cart 購物車 Part.3

參考影片-第五篇:https://www.youtube.com/watch?v=HSMqi913SL4
本篇在教如何將商品加入購物車。(有些人可能會遇到加入購物車後的頁面有出錯的冏境,影片中沒有提到怎麼解決的,我是自己亂試出來的,可以參考看看)
參考影片-第六篇:https://www.youtube.com/watch?v=m7BiZ0dAXh8
加入頁面的讀取權限。

第五篇跟第六篇最後的結果直接寫一起嘍!因為會編輯同樣的檔案。

編輯views/products/index.html.erb,加入藍色那行。(第五篇)
...
        <td><%= link_to 'Edit', edit_product_path(product) %></td>
        <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
        <td><a href="/cart/<%= product.id %>">加入購物車</a></td>
      </tr>
    <% end %>
...

編輯views/cart/index.html.erb。(第五、六篇)
<h1>你的購物車</h1>

<% if @cart.empty? %>
  <p>購物車中沒有任何商品</p>
<% else %>
  <%= link_to '清空購物車', cart_clear_path %>
<% end %>

<br/><br/><br/>

<% total = 0 %>

<ul>
<% @cart.each do | id, quantity | %>
    <% product = Product.find_by_id(id) %>
    
    <li>
        <%= link_to product.title, product %>
        <p><%= product.description %></p>
        <p><%= number_to_currency(product.price, :unit => '$') %></p>
        <p>Quantity: <%= quantity %></p>
    </li>
    <% total += quantity * product.price %>
<% end %>
<p><strong><%= number_to_currency(total, :unit => '$') %></strong></p>
</ul>

編輯cart_controller.rb,加入權限讀取,限制一定要登入會員後才能讀取頁面,except是指除了[:index]外,其餘action都必須要限制登入才能讀取。(第六篇)
class CartController < ApplicationController  
  before_action :authenticate_user!, except: [:index]
  def add
    id = params[:id]  
  ...
end

編輯page_controller.rb,一樣加入權限讀取,跟上方不一樣的是except改成only,only即指只有在[:contact]裡的action才需要做限制。(第六篇)
class PageController < ApplicationController
  before_action :authenticate_user!, only: [:contact]
  
  def home
  end
  ...
end

如果頁面在加入購物車後會出錯,請先檢查routes.rb,是否有設定好。
  root 'page#home'
  
  devise_for :users
  
  get '/cart' => 'cart#index'
  get '/cart/clear' => 'cart#clearCart'
  get '/cart/:id' => 'cart#add'
  #get 'cart#index'

  resources :products

  get 'page/about'

  get 'page/faqs'

  get 'page/contact'
這是我routes.rb的內容,routes.rb裡的內容順序是有意義的哦,我將原本放在中間的root 'page#home'移到最前面後再存檔就能work了,很神奇唄!連我都不大清楚why…會不會是我一開始就沒存檔…

購物車的部份就到這邊全部結束。