我在MVC3视图页面中有2个表单,基于某些条件我必须隐藏一个表单,但是我收到一些错误,找不到是什么错误?下面是代码,
@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 :(得分:2)
if条件的正确语法如下。
@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 :(得分:2)
尝试重新使用开始表单前的@
符号..并使用大写 P 将FormMethod.post
更正为FormMethod.Post
。
当你已经在c#代码中时,在使用之前你不需要使用@。
答案 2 :(得分:1)
更改您的if,并且FormMethod.Post
不是FormMethod.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#代码已启动,所以在如果阻止你不需要再次放置 @ 在 BeginFom 之前
答案 3 :(得分: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")
}