在MVC视图页面中隐藏表单

时间:2014-07-08 06:23:17

标签: c# jquery asp.net-mvc asp.net-mvc-3

我在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 "@".

4 个答案:

答案 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")
}