2014-07-08 87 views
0

我在MVC3視圖頁中有2個表單,基於某些條件我必須隱藏一個表單,但是我收到一些錯誤,找不到錯誤是什麼?下面是代碼,在MVC視圖頁中隱藏表單

@model Models.Common.Details 
@{ 
    if (ViewContext.IsChildAction != true && !Request.IsAjaxRequest()) 
    { Layout = "../../Shared/DefaultLayout.cshtml"; } 
    else 
    { Layout = null; } 
} 

@using Models.Common; 
@{ ViewBag.Title = "Premium";} 
<script type="text/javascript" language="javascript"> 
    var urlContent = "@Url.Content("~/")"; 
    var currentYear = "@DateTime.Now.Year"; 
    var currentMonth = "@DateTime.Now.Month"; 
</script> 
<script src="@Url.Content("~/Scripts/UIScripts/paymentmodule/Premium.js?" + DateTime.Now)" type="text/javascript"></script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber1) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber2) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber3) 
<input type="submit" id="Settle" name="Settle" value="Settle"/> 
} 

@{ 
if (!(Session["User"].Equals(Constant.User))) 
{ 
@using (Html.BeginForm(null,null,FormMethod.post,new{@action="www.somelink.com/abce"})) 
{ 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber4) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber5) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber6) 
<input type="submit" id="ok" name="Ok" value="Settle"/> 
} 
} 
} 

我已經使用這個代碼@ {} -----基於這個條件,我需要隱藏的第二個形式,因爲它是視圖頁面編寫C#conditon,我不知道是什麼錯誤來了,但我不能去這個觀看頁面本身。 如果我刪除該代碼塊{{-----},一切工作正常。 任何建議傢伙?

Error Message: 
UserMessage= Error Occurred at : 07/08/2014 12:03:02.547 
Exception Details : System.Web.HttpParseException (0x80004005): Unexpected "using" keyword after "@" character. Once inside code, you do not need to prefix constructs like "using" with "@". 
+0

收到什麼樣的錯誤? –

+0

@EhsanSajjad添加了錯誤信息 – Govind

+0

看到答案,希望它有幫助 –

回答

2

正確的條件語法如下。

@if (!(Session["User"].Equals(Constant.User))) 
{ 
    using (Html.BeginForm(null, null, FormMethod.post, new { @action = "www.somelink.com/abce" })) 
    { 
     @Html.ValidationSummary(true) 
     @Html.AntiForgeryToken() 
     @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber4) 
     @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber5) 
     @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber6) 
     <input type="submit" id="ok" name="Ok" value="Settle" /> 
    } 
} 
1

更改,如果是這樣,這是FormMethod.PostFormMethod.post

@if (!(Session["User"].Equals(Constant.User))) 
{ 
using (Html.BeginForm(null,null,FormMethod.Post,new{@action="www.somelink.com/abce"})) 
{ 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber4) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber5) 
@Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber6) 
<input type="submit" id="ok" name="Ok" value="Settle"/> 
} 
} 

另外,藉助使用@你是在告訴C#代碼開始,所以裏面如果塊你不編譯t需要再次輸入@之前BeginFom

+0

在使用前刪除@工作正常。但在其他情況下,我也需要使用第二種形式,以便我需要使用@右鍵?這就是爲什麼我需要使用之前使用.. – Govind

+0

我認爲它也會工作..我可能是錯的..謝謝你幫助我。 – Govind

+0

很高興幫助過 –

2

嘗試使用開始格式的@標誌,並使用大寫P修正FormMethod.postFormMethod.Post

當您已經在C#代碼中時,在使用之前不需要使用@。

+0

在使用前刪除@正常工作。但在其他情況下,我也需要使用第二種形式,以便我需要使用@右鍵?這就是爲什麼我需要在使用前使用..我已經使用了大寫字母P,在questin拼寫錯誤的單詞。無論如何謝謝 – Govind

+1

您的問題即將出現,因爲您將代碼放在了剃鬚刀代碼塊中 - @ {...}。你不需要這種結構。當你需要的時候或者剛開始輸入@if(condition){..}或者@using(Html.Form ..){...}而不用包裝它的代碼塊的時候:) ..這取決於你需要的情況使用@。如果您已經使用C#代碼,則不需要它。開始時有點棘手,但隨着時間的推移它變得很自然:) –

1

寫第二,如果像

@if (!(Session["User"].Equals(Constant.User))) 
{ 
    //remove @ here and make p of post capital like Post 
    using (Html.BeginForm(null,null,FormMethod.Post,new{@action="www.somelink.com/abce"})) 
    { 
    @Html.ValidationSummary(true) 
    @Html.AntiForgeryToken() 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber4) 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber5) 
    @Html.HiddenFor(m => m.newPolicyDetails.ReferenceNumber6) 
    <input type="submit" id="ok" name="Ok" value="Settle"/> 
    } 
} 

雖然更好的可讀性和維護我會建議你使用部分頁面像

@if (SomeCondition) 
{ 
    @Html.Partial("_firstPage") 
} 
else if (OtherCondition) 
{ 
    @Html.Partial("_secondPage") 
}