如何在MVC 5中调用http get而不是post for page load

时间:2014-10-02 10:47:09

标签: asp.net-mvc asp.net-mvc-5

我在ASP.Net MVC5中有一个创建表单。当页面加载时,有一些数据要从DB中提取,并且在按钮提交点击时,应该调用创建控制器来保存数据。问题是当页面加载时它总是转到HTTP POST方法而不是get方法。(我知道很少有这样的问题已经提出,但这里没有任何帮助)如果我重命名HTTP POST方法名称,那么它正确调用get方法。有两个同名的动作,它总是调用HTTP POST方法,而页面加载和按钮点击不会调用任何动作方法。

这是ASP.Net MVC的Sharepoint高信任提供程序应用程序,因此我的URL在浏览时会有所不同。

我的视图和控制器看起来像这样。这里有什么不对吗?

@using (Html.BeginForm("Create", "Test"))    
{    

    <div class="form-horizontal">
                <div class="form-group">
                    @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" })
                    <div class="col-md-10">
                        @Html.EditorFor(model => model.Title)
                        @Html.ValidationMessageFor(model => model.Title)
                    </div>
                </div>
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>       
    </div>
 }

public ActionResult Create()    
{   
    MyModel model = new MyModel();
    string usersid = ((System.Security.Principal.WindowsIdentity)(HttpContext.User.Identity)).User.Value;

            //Bind Board details
            eDataAccess mda = new eDataAccess();
            ExtDataTable committees = mda.GetList(usersid, "--url--");

            GetAllUserList(model.comitteeslist.FirstOrDefault().Value, usersid);

            // few logic

           return View(model);
}

    [HttpPost]     
    public ActionResult Create(MyModel model)    
    {
string usersid = ((System.Security.Principal.WindowsIdentity)(HttpContext.User.Identity)).User.Value;
   // few logic
                int id = Utilities.Create(model.Title, usersid, 2057, 6297,
                   model.desc, false, model.start, model.end);

        return View();
    }

1 个答案:

答案 0 :(得分:1)

花了几个小时后,我找到了解决问题的方法。我已经更改了主页加载操作方法,只是为了重定向到另一个操作方法。第二个动作具有实际逻辑以及get和post方法。这样它工作正常。

我仍然没有回答为什么它会这样做。然而,这个解决方案有助于并正常工作。

public ActionResult Index()
{
    return RedirectToAction("Create");
}

public ActionResult Create()    
{   
     MyModel model = new MyModel();
     string usersid = ((System.Security.Principal.WindowsIdentity)(HttpContext.User.Identity)).User.Value;

     //Bind Board details
     eDataAccess mda = new eDataAccess();
     ExtDataTable committees = mda.GetList(usersid, "--url--");
     GetAllUserList(model.comitteeslist.FirstOrDefault().Value, usersid);
    // few logic
     return View(model);
 }

[HttpPost]     
public ActionResult Create(MyModel model)    
{
  string usersid = ((System.Security.Principal.WindowsIdentity)(HttpContext.User.Identity)).User.Value;
 // few logic
 int id = Utilities.Create(model.Title, usersid, 2057, 6297,
               model.desc, false, model.start, model.end);
 return View();
}