2013-08-04 43 views
0

我的網站有一個簡單的表單,允許輸入訂單詳細信息。我想首先顯示一個「計算價格」按鈕。只有計算了一次價格後,纔會顯示「下單」按鈕。MVC 4計算價格/訂單訂單模式

我有我的看法如下:

@using (Html.BeginForm("PlaceOrder", "Order")) 
{ 
    <div id="OrderEntry" class="listWithoutBullets"> 
     <ul> 
      <li>Name: @Html.TextBoxFor(m => Model.Name)</li> 
      <li>Address Line 1: @Html.TextBoxFor(m => Model.Address1)</li> 
      <li>Address Line 2: @Html.TextBoxFor(m => Model.Address2)</li> 
      <li>Postcode: @Html.TextBoxFor(m => Model.Postcode)</li> 

      <li>Number of Single Photos: @Html.TextBoxFor(m => Model.SinglePhotos)</li> 
      <li>Number of Show Boxes Filled with Photos: @Html.TextBoxFor(m => Model.ShoeBoxes)</li> 

      <li>Require Digital Images on DVD: @Html.CheckBoxFor(m => Model.DVD)</li> 
      <li>Require Digital Images on USB Memory Stick: @Html.CheckBoxFor(m => Model.USBMemory)</li> 

      <li>Discount Code: @Html.TextBoxFor(m => Model.DiscountCode)</li>      
     </ul>  
    </div> 

    <div id="OrderPricing"> 
     <ul>  
      <li>Total Exc VAT: £@Html.DisplayFor(m => Model.TotalExcVat,null,"lblTotalExcVat")</li> 
      <li>Total Inc VAT: £@Html.DisplayFor(m => Model.TotalIncVat,null,"lblTotalIncVat")</li>    
     </ul> 
    </div> 

    @Html.HiddenFor(m => Model.CalculatePrice); 

    if (Model == null) 
    { 
     <input type="submit" value="Calculate Price" onclick="setCalculatePriceOn" /> 
    } 
    else 
    { 
     if (Model.TotalExcVat > 0) 
     { 
      <input type="submit" value="Place Order" onclick="setCalculatePriceOff" /> 
      <input type="submit" value="Calculate Price" onclick="setCalculatePriceOn" /> 
     } 
     else 
     { 
      <input type="submit" value="Calculate Price" onclick="setCalculatePriceOn" /> 
     } 
    }   
} 

爲了設置隱藏布爾模型場「CalcualtePrice」我增加了以下Java腳本(我什麼都不知道關於Java腳本):

<script type="text/javascript"> 

function setCalculatePriceOn() { 
    jQuery("#CalculatePrice").val('true'); 
} 

function setCalculatePriceOff() { 
    jQuery("#CalculatePrice").val('false'); 
} 

JavaScript,我只是簡單地添加在我的cshtml文件的腳。

在控制器內,我檢查是否設置了「CalculatePrice」的模型布爾值字段,以決定用戶是否嘗試計算價格或下訂單。

我的問題是,Java腳本似乎並沒有得到運行。我是否需要將它綁定到點擊事件?現在整個cshtml頁面看起來過於複雜和凌亂,因爲我試圖解決提交計算和放置順序的問題。我最初試圖通過檢查控制器中的http動詞來解決這個問題(GET用於計算價格,PUT用於下訂單),但我似乎無法覆蓋「Html.BeginForm」所使用的動詞,取決於哪個按鈕被點擊。

希望有人會有一個整潔的解決方案,我猜一定是一個相當常見的用例,計算價格/地點順序?

+2

仔細看看這個,我認爲它會幫助你:http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in-asp-net-mvc -framework聽起來就像你有一個多重提交按鈕問題。 –

+0

謝謝傑森,我確實有多重提交按鈕問題,並找到您建議的鏈接上的解決方案。 –

+0

將我的評論移到答案中,以便更一致。 –

回答

0

嘗試使用onclick的onsubmit事件並添加一條return語句。新的按鈕會像

<input type="submit" value="Calculate Price" onsubmit="return setCalculatePriceOn();" /> 

和JavaScript函數將

function setCalculatePriceOn() { 
    jQuery("#CalculatePrice").val('true'); 
    return true; 
} 

function setCalculatePriceOff() { 
    jQuery("#CalculatePrice").val('false'); 
    return true; 
} 

這將確保該表單提交前的隱藏字段的值被更新。