【问题标题】:How to fill a form with model data in ASP.NET MVC如何在 ASP.NET MVC 中使用模型数据填充表单
【发布时间】:2018-07-31 00:34:15
【问题描述】:

在尝试让基本的 CRUD 在我的 Web 应用程序中工作时,我遇到了一些问题。我已经设法使用了

Html.Beginform("bla","bla", FormMethod.Get) 

将字符串想要的数据正确查询到新视图。

照片证据:

现在我已经在互联网上搜索了教程,以及在表单中显示所述查询字符串数据的方法,但我没有发现任何对我有帮助的东西。

这是我希望填写的页面的视图代码和我的 ActionResults:

@using MvcApplication1.Models;
@model Klant
@{
    ViewBag.Title = "ShowKlant";
}

<h2>ShowKlant</h2>
<div id="producetop" class="row">
    @{ @*if (@Model == null)
            {
               <div>geen producten gevonden</div>
            }
            else
            {*@
    //foreach (Klant kl in Model)
    //{

    <div style="float: left">
        <fieldset id="produce">
            <form method="get">
                <div><labe>ID: </labe><input type="hidden" name="id" value="@Html.Value("","")" /></div>
                <div><label>Naam:</label> <input type="text" name="naam" value="" /></div>
                <div><label>Woonplaats:</label> <input type="text" name="woonplaats" value="" /></div>
                <div><label>Geboortedatum:</label> <input type="text" name="gebdat" value="" /></div>
                <div><label>Geslacht:</label> <input type="text" name="geslacht" value="" /></div>
                <div><label>Beschrijving:</label> <input type="text" name="beschrijving" value="" /></div>

            </form>
        </fieldset>
    </div>

        @*}*@
    }

    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
</div>

行动结果:

public ActionResult ShowKlant()
    {
        return View();
    }

    [HttpPost]
    public ActionResult ShowKlant(int? idklant)
    {
        Klant k = new Klant();
        KlantDBController sc = new KlantDBController();
        k = sc.getById(idklant);
        return View(k);
    }

这是“推送”查询字符串的视图:

    @using MvcApplication1.Models;
@model List<Klant>
@{
    ViewBag.Title = "ShowAllKlanten";
}

<h2>ShowAllKlanten</h2>
@using (Html.BeginForm("ShowKlant", "Home", FormMethod.Get, new { @enctype = "multipart/form-data" }))
{
    if (@Model == null)
    {
    <div>geen producten gevonden</div>
 }
 else
 {
    <div></div><br>
     foreach (Klant kl in Model)
     {



            <tr>
                <td>
                    @Html.DisplayFor(modelItem => kl.idklant)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => kl.naam)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => kl.woonplaats)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => kl.geboortedatum)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => kl.geslacht)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => kl.beschrijving)
                </td>

                <td>
                    @Html.ActionLink("Details", "ShowKlant", new { id = kl.idklant, naam = kl.naam, woonplaats = kl.woonplaats, gebdat = kl.geboortedatum, geslacht = kl.geslacht, beschrijving = kl.beschrijving }) |
                    @Html.ActionLink("Edit", "ShowKlant", new { id = kl.idklant }) |
                    @Html.ActionLink("Delete", "ShowKlant", new { id = kl.idklant })<br /><br />
                </td>
            </tr>

我希望能朝着正确的方向轻推,因为我现在完全糊涂了。

我先发制人地假设我的操作结果是完全错误的,但是我不确定如何纠正它们。


更多上下文:

    public class DatabaseController : Controller
{
    protected MySqlConnection conn;

    public DatabaseController()
    {
        //Vul hier de juiste gegevens in!!
        conn = new MySqlConnection("Server=localhost;Database=dating;Uid=root;Pwd=root;");
    }
}

加载我的表的 SQL:

public List<Klant> getAllKlanten(String naam)
    {
        MySqlTransaction trans = null;
        List<Klant> klanten = new List<Klant>();

        conn.Open();
        trans = conn.BeginTransaction();
        try
        {
            string selectQuery = @"select * from klant;";

            MySqlCommand cmd = new MySqlCommand(selectQuery, conn);
            //MySqlParameter naamParam = new MySqlParameter("@naam", MySqlDbType.VarChar);
            //naamParam.Value = "%" + naam + "%";
            //cmd.Parameters.Add(naamParam);
            cmd.Prepare();


            MySqlDataReader dataReader = cmd.ExecuteReader();
            while (dataReader.Read())
            {
                Klant klant = new Klant();
                klant.idklant = dataReader.GetInt32("idklant");
                klant.naam = dataReader.GetString("naam");
                klant.woonplaats = dataReader.GetString("woonplaats");
                klant.geboortedatum = dataReader.GetDateTime("geboortedatum");
                klant.geslacht = dataReader.GetString("geslacht");
                klant.beschrijving = dataReader.GetString("beschrijving");


                klanten.Add(klant);
                Console.Write(klant.naam);
            }
        }

        catch (Exception e)
        {
            throw new Exception("Product niet toegevoegd: " + e);
        }

        finally
        {
            conn.Close();
        }

        return klanten;
    }

这是我最初的视图:

这就是我试图用所说的查询字符串填充的内容:

【问题讨论】:

  • 很抱歉,在Photo evidence 之后我真的失去了你。你首先要做什么,- 然后我知道你已经找到了一些解决方案 - 但我不知道是什么,然后是什么你找到的解决方案有问题吗?!?
  • 对不起,我想要实现的是从查询字符串中获取显示的数据到一个表单中,我可以用它来编辑 de db(这部分我知道该怎么做)。但我无法将数据输入表单。
  • 还是很模糊。这些行对我来说也是非常可疑的错误:KlantDBController sc = new KlantDBController();k = sc.getById(idklant); (1) 你为什么提到实体框架 (2) 你的数据在哪里,什么样的数据库 (3) 你是否创建了一个 edmx 文件(如在 EntityModel ) 为您的数据? (4) 查询字符串是如何或从哪里来的?你似乎做错了一些基本的事情和/或在一个非常不同的思维平面上。你看过一些基本的 asp-mvc 例子吗?
  • 那些可疑的错误行也是我认为错误的,我将添加我的 db Connnection 和加载我的初始数据的 SQL。但是这会让我的问题变得很长。
  • 如果它是一个控制器,你在一个动作方法中实例化它是完全错误的,并且给我的结论是你真的走错了路。我建议您完全清理您的代码,从 Visual Studio 执行 Build->Clean 并压缩整个文件夹并将其放在谷歌驱动器、保管箱的某个位置并在此处发布链接。然后用(A)你真正想要的是什么来更新你的问题(B)你在哪里尝试过缩小问题所在。您的问题可能不是您认为的那样,它可能更为根本。 :见tinyurl.com/stack-hints

标签: c# html asp.net-mvc-4 razor


【解决方案1】:

我会给你一个的答案,并指出你问题中的一些错误:

(1) :此页面最初生成是为了显示Klant列表。您错误地更改了代码以尝试使其显示一个。您应该生成一个详细信息页面。

@using MvcApplication1.Models;
@model Klant
@{
    ViewBag.Title = "ShowKlant";
}
<h2>ShowKlant</h2>
<div id="producetop" class="row">
@{ @*if (@Model == null)
    {
       <div>geen producten gevonden</div>
    }
    else
    {*@
//foreach (Klant kl in Model)
//{

_"当您单击详细信息时 -> 它不应放入该查询字符串。您应该有一个显示 Klant 详细信息的详细信息方法:

public ActionResult ShowKlant()
{
    return View();
}

[HttpPost]
public ActionResult ShowKlant(int? idklant)
{
    Klant k = new Klant();
    KlantDBController sc = new KlantDBController();
    k = sc.getById(idklant);
    return View(k);
}
//I don't know which you want to use but it has to really be like this.
//
[HttpGet] //most likely should be a GET
public ActionResult ShowKlant(int? idklant)
{//you are ONLY receiving an idklant so you don't
 //need to shove more things into a query string...
    Klant k = new Klant();
    //get the data of your "Klant" and fill it here..
    k.naam = "Bob";
    //etc       
    return View(k); 
}
//the above method will expect a ShowKlant.cshtml
// that page should be generate as a "Details" page
//and should have @model Klant on the top.

这是那里的 1/4,你需要这样的东西:

<fieldset id="produce">
<form method="get">
<div><labe>ID: </labe><input type="hidden" name="id" value="@:model.naam" /></div>
<div><label>Naam:</label> <input type="text" name="naam" value="@model" /></div>

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2014-02-14
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多