【问题标题】:razor mvc4 and c# codebehindrazor mvc 4 和 c# 代码后面
【发布时间】:2013-09-10 04:19:12
【问题描述】:

好的,所以我刚开始使用razor mvc4,并且对c#有一点经验。我目前正在制作一个有按钮的网站。我的 html 如下:

<button onclick ="vote1_click"  id="VoteButton" value="Vote">Vote</button>

这是在 .cshtml 视图中

然后我有一个类来处理 vote1_click 事件。它在 c# 中,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication1
{
    public class voting
    {
        public void vote1_click(object sender, EventArgs e)
        {
        }
    }
}

我相信我的问题是对剃须刀结构的基本理解,但我自己无法弄清楚。

感谢任何帮助,当答案很简单时,我会尽量不要觉得太愚蠢。

谢谢!

编辑:

我遇到了一个问题,即 Add(string name) 给我一个“并非所有代码路径都返回值”的错误

这是我要求的其余代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;

namespace WAgermanClub.Controllers
{
public class HomeController : Controller
{

    [HttpPost]
    public ActionResult Add(string vote)
    {




        SqlConnection vote1connection = new SqlConnection("user id=userid;" +
                                      "password=validpassword;server=o5z5dpwpzi.database.windows.net;" +
                               "Trusted_Connection=yes;" +
                               "database=wagermanclub_votes; " +
                               "connection timeout=30");
        try
        {
            vote1connection.Open();
        }
        catch (Exception g)
        {
            Console.WriteLine(g.ToString());
        }

        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from table", vote1connection);
            myReader = myCommand.ExecuteReader();
            while (myReader.Read())
            {

                Console.WriteLine(myReader["Vote1"].ToString());
            }
        }
        catch (Exception i)
        {
            Console.WriteLine(i.ToString());
        }


        SqlCommand vote1command = new SqlCommand("INSERT INTO table (Column1, Vote1) " +
                              "Values (1, 'Vote1' + 1)", vote1connection);


        vote1command.ExecuteNonQuery();

        try
        {
            vote1connection.Close();
        }
        catch (Exception h)
        {
            Console.WriteLine(h.ToString());
        }






    }
}

}

这是我的 HTML:

@{
ViewBag.Title = "Ideas";

}

 @section featured {
<section class="featured">
    <div class="content-wrapper">
        <hgroup class="title">
            <h1>@ViewBag.Title.</h1>
            <h2>@ViewBag.Message</h2>
        </hgroup>
        <p>

        </p>
    </div>
</section>
}

<body>
<div  style="border: solid; max-width: 300px; margin-left: auto; margin-right: auto">


    @using(Html.BeginForm())
    {

    <input type="submit" value="Vote"/>
    }

 </div>




</body>

谢谢!

【问题讨论】:

  • 您对 Razor 的理解不是问题,至少目前不是。您没有理解 ASP.NET MVC 和 ASP.NET WebForms 之间的区别。

标签: c# html razor


【解决方案1】:

您对 ASP.NET 网络表单和 MVC 感到困惑。 MVC 更多地以经典的 Web(GET-POST 表单)样式工作。您发布带有值的表单。代码隐藏中没有像 Web 表单中那样的点击事件和事件处理程序。

所以要渲染你的页面,你可能在你的 HomeController 中有一个这样的操作方法

public class HomeController : Controller
{
   public ActionResult Add()
   {
     return View();
   }
}

所以在您的添加视图(剃刀文件)中,您需要一些代码来呈现带有输入元素的表单标签。让我们使用Html.Begin 表单助手方法为我们渲染表单标签。

@using(Html.Beginform())
{    
  <input type="text" name="name" />
  <input type="submit" />
}

这将在您的标记中呈现一个form 标记,并将操作属性设置为“Home/Add”,假设您的 GET 操作方法在 HomeController 中。 (查看页面的视图源)

因此,当用户单击提交按钮时,它会将表单发布到Add 操作。所以请确保您在 HomeController 中有这样的操作方法来处理表单发布。(用HttpPost 属性装饰的那个

[HttpPost]
public ActionResult Add(string name)
{
  //do something with the posted values
  return RedirectToAction("Success");  // redirecting to another view
}

【讨论】:

  • RedirectToAction 的目的是什么?
  • @HarrisonGibbs 这将重定向您的操作方法Success。用它来坚持 PRG 模式。stevefenton.co.uk/Content/Blog/Date/201104/Blog/…
  • add(string name) 给我一个错误“并非所有代码路径都返回一个值”
  • @HarrisonGibbs 看起来你有一个 If 条件或尝试 catch 你没有返回任何东西。发布您的完整代码,我会看看有什么问题
【解决方案2】:

您可能会将 webforms 模型与 asp.net mvc 模型混淆。

razor 仅在您使用网页或 asp.net mvc 时可用。

对于 asp.net mvc,没有您在此处定义的服务器方法/事件的概念。

您通常需要在控制器中定义操作方法,这些方法将负责处理您发布的任何表单。

您可能想在ASP.NET MVC 上查看更多信息

【讨论】:

    【解决方案3】:

    MVC 不实现 Web 表单样式的视图状态和事件处理程序。所以没有 vote1_click。你想要做的是要么

    1) 创建一个 JavaScript Post/Get 回服务器

    2) 有一个表单并将所有表单变量回传到服务器

    这是一个开始 MVC 的很好的例子:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多