2013-10-04 77 views
0

我正在学习MVC,继THIS教程。 (链接将直接带你到我卡住的地方)。到目前为止,我已经了解到,每个视图都有一个控制器。现在,我必须通过教程中提到的Web入口表单来接受用户的输入。在我的项目中,我有一个名为Default1的控制器,我可以将其作为localhost:xyz/Default1/Index运行。它运行完美。在MVC中使用webforms

然后,我创建了一个新的控制器,名为Default2并将其绑定到某些视图以显示一些数据,并且它完美地作为localhost:xyz/Default2/Displaycustomer。客户信息是静态的(硬编码)。和控制器是:

public ViewResult DisplayCustomers() 
    { 
     Customer cobj = new Customer(); 
     cobj.Code = "12"; 
     cobj.Name = "Zeeshan"; 
     cobj.Amount = 7000; 


     return View("DisplayCustomers",cobj); 
    } 

现在我不得不采取从用户的输入,对于CUTOMER见识,使用在教程中提到html页面。所以我尝试添加新Web窗体视图文件夹,并修改了我的控制器:

[HttpPost] 
    public ViewResult DisplayCustomers() 
    { 
     Customer cobj = new Customer(); 

     cobj.Code = Request.Form["Id"].ToString(); 
     cobj.Name = Request.Form["Name"].ToString(); 
     cobj.Amount = Convert.ToDouble(Request.Form["Amount"].ToString()); 

     return View("DisplayCustomers",cobj); 
    } 

我的问题是:我怎样才能让我的项目看呆了,所以它需要输入第一,然后使用上面的控制器显示它?我是否在正确的位置添加了网页表单?运行它的链接是什么?我尝试了localhost:xyz/Default2/entryform等,但失败了。 (在我entryform.aspx,我刚才提到的形式行动=“DisplayCustomer”

+0

您的观点如何?当你说修改你的控制器,这是否意味着在控制器中你只有一个HttpPost方法?或者你也有一个HttpGet? – kandroid

回答

1

这听起来像你缺少的只是一个动作来显示表单。换句话说,你只需要一个动作来显示一个表单。该表单的POST操作应引用您的控制器的DisplayCustomers操作。

在控制器代码

所以:

public class CustomerController : Controller 
{ 
    [HttpGet] 
    public ViewResult New() 
    { 
     return View("NewCustomer"); //Our view that contains the new customer form. 
    } 

    // Add your code for displaying customers below 
} 

而且在你看来,你有这样的代码,我使用的BeginForm助手的版本指定的动作这个

@using(Html.BeginForm("DisplayCustomers", "Customer")) { 
    <!-- Add your form controls here --> 
} 

公告方法和控制器来调用。这会将form标签写回到您的DisplayCustomers操作。下面是对应的HTML:

<form method="POST" action="/Customer/DisplayCustomers"> 

这样,你会使用URL http://test.server/Customer/New访问形式。

+0

谢谢。我想知道2件事。 ** 1:**从您的答案中,我假设我已创建一个名为** Customer **的控制器,用于我们的输入表单视图,名为** NewCustomers **。在我们的入口表格中,我们已经指定它将调用另一个名为** DisplayCustomers **的控制器,它将显示客户视图。我说得对吗? ** 2:**让我们假设,我没有使用这个HTML帮助器的东西,那么我将不得不指定

..对吗? – Zeeshan

+1

@Zeeshan你的第一个假设是右半边。是的,我们创建了一个名为** Customer **的新控制器,但** New **和** DisplayCustomers **都是该控制器的一部分。至于你的第二个问题,如果你不使用助手,该方法将是POST,并且该操作将是http://test.server/Customer/DisplayCustomers。我会用那个细节更新我的答案。 – villecoder

+0

好。我已经开始获得化学:)你的意思是,在同一个控制器中,我们有2个方法,2个视图。对? – Zeeshan

0

这可能不是世界上最好的例子......但是这将至少让你滚..

网址是:本地主机:1234 /家庭/客户

控制器

public ActionResult Customer() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Customer(FormCollection frm) 
    { 

     var name = frm["name"].ToString(); 
     var address = frm["address"].ToString(); 

     ViewBag.Name = name; 
     ViewBag.Address = address; 

     return View(); 
    } 

视图

<div> 
    @using (Html.BeginForm()) 
    { 
     <input type="text" name="name" id="name" /> 
     <input type="text" name="address" id="address"/> 

     <input type="submit" name="submit" value="submit" /> 

     <input type="text" name="namedisplay" value='@ViewBag.Name'/> 
     <input type="text" name="addressdisplay" value='@ViewBag.Address'/> 

    } 
</div> 
+0

谢谢。请你解释一下,我应该在哪里保留视图,以及它的名字和我的应用程序指定要先调用视图的位置?对不起,我是新手。 – Zeeshan