Avatar billede aero Nybegynder
31. oktober 2010 - 23:12 Der er 7 kommentarer og
1 løsning

C# MVC Basic problem.

Hej

Har kastet mig over en bog Manning ASP.NET MVC 2 In Action 2nd Edition, jeg har bare et problem, der er omtalt noget /GuestBook/Sign/ men jeg kan ikke finde den del, det er somom det er sprunget over, hvilket betyder at min kode ikke virker.

Min kode er som flg.
/GuestBook/
Index.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content3" ContentPlaceHolderID="TitleContent" runat="server">
Index
</asp:Content>
<asp:Content ID="Content4"
ContentPlaceHolderID="MainContent" runat="server">
<h2>Guest Book</h2>
<p>Please sign the Guest Book!</p>
<form method="post" action="/GuestBook/Sign">
<fieldset>
<legend>Guest Book</legend>
<%= Html.Label("Name") %>
<%= Html.TextBox("Name") %><br />

<%= Html.Label("Email") %>
<%= Html.TextBox("Email") %><br />

<%= Html.Label("Comments") %>
<%= Html.TextArea("Comments", new { rows=6, cols=30 }) %>
<div>
<input type="submit" value="Sign" />
</div>
</fieldset>
</form>
</asp:Content>

/GuestBook/
ThankYou.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    ThankYou
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Thank You!</h2>
<p>Thank you for signing the guest book! You entered:</p>
Name: <%= ViewData["name"] %><br />
Email: <%= ViewData["email"] %><br />
Comments: <i><%= ViewData["comments"] %></i>

</asp:Content>

Og min GuestBookController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class GuestBookController : Controller
    {
        //
        // GET: /GuestBook/

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

    }

    public ActionResult Sign(string name, string email, string comments)
    {
        //do something with the values, such as send an email
        ViewData["name"] = name;
        ViewData["email"] = email;
        ViewData["comments"] = comments;
        return View("ThankYou");
    }
}

jeg kan fint hente min form frem så jeg kan se hvordan den virker, men når jeg indsætter noget tekst og klikker submit så kan den ikke finde ud af den da den mangler /GuestBook/Sign/ men jeg ved jo ikke hvad det skal være og hvordan da jeg er ny i dette, kan nogle se ud fra koden hvad jeg mangler !?
Avatar billede Syska Mester
01. november 2010 - 00:04 #1
/GuestBook/Sign/ henviser til:

GuestBookController <- Delen før Controller

Sign henvser til din action:
public ActionResult Sign(string name, string email, string comments)

Hvis du kigger i din Global.asax kan du se dine Routes, det må de have omtalt i bogen.

Default ligner:
routes.MapRoute(
    "Detault",                                              // Route name
    "controller/{action}/{id}",                          // URL with parameters
    new { controller = "Account", action = "Index", id = "" }  // Parameter defaults
);

mvh
Avatar billede aero Nybegynder
01. november 2010 - 22:19 #2
Hej Buzzzz

Betyder det at jeg skal lave flg.

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
                new { controller = "GuestBook", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
Avatar billede aero Nybegynder
01. november 2010 - 22:45 #3
eller skal jeg lave en ekstra Router.MapRoute() ala dette

            routes.MapRoute(
            "Sign", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "GuestBook", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

btw de nævner ikke den SIGN ting i bogen...
Avatar billede Syska Mester
01. november 2010 - 23:01 #4
Du må have en Global.asax allerede ... hvad står der i den omkring routes.

Overstående burde virke default ...


/controller/action/id

Ergo ... skriver du en url som

/GuestBook/Sign/100

Vil du ramme en controller ved navn "GuestBook" Controller. ( Controller navnet bliver tilføjet i enden, og er en del af conventionen omkring asp.net mvc.

På din GuestBook controller vil den lede efter en Action ( Method ) ved navn "Sign" ....

Hvis Sign har en parameter den hedder "id" ... så vil den smide 100 ned i den.

Eller som det er lavet på din side ... så vil den mappe de forskellige forms elementer til navnene i din "Sign" action.

Dvs
<%= Html.TextArea("Comments", new { rows=6, cols=30 }) %>
vil blive mappet til "comments" delen af din Action:
public ActionResult Sign(string name, string email, string comments)

Etc.

Eventuelt kig på http://www.asp.net/mvc ... god side for begyndere.

http://www.asp.net/mvc/videos/how-to-best-learn-asp-net-mvc

mvh
Avatar billede aero Nybegynder
03. november 2010 - 21:14 #5
Hej Buzzzz vil du smide et svar...
Jeg har købt en bedre bog "APress Pro ASP.NET MVC FrameWork"
Jeg har bare et problem, jeg har en del Views og de virker fint, og så har jeg en form. som ved korrekt udfyldelse sender en mail eller opretter en fil på min pc. men det kunne jeg ikke få den til, det er en lille stump kode der skal være i Web.config men den har jeg jo to af.

Jeg har en Web.config i roden af mine filer og så en direkte i min views mappe, kan du evt. hjælpe.

Når jeg har udfyldt min form så køre det indtastede igennem en validator for at se om det er OK.

Hvis det er så bliver denne del kørt:

/models/GuestResponse.cs
...
..
.
public void Submit()
        {
        EnsureCurrentlyValid();
        // Send via email
        var message = new StringBuilder();
        message.AppendFormat("Date: {0:yyyy-MM-dd hh:mm}\n", DateTime.Now);
        message.AppendFormat("RSVP from: {0}\n", Name);
        message.AppendFormat("Email: {0}\n", Email);
        message.AppendFormat("Phone: {0}\n", Phone);
        message.AppendFormat("Can come: {0}\n", WillAttend.Value ? "Yes" : "No");
        SmtpClient smtpClient = new SmtpClient();
        smtpClient.Send(new MailMessage(
        "rsvps@example.com", // From
        "party-organizer@example.com", // To
        Name + (WillAttend.Value ? " will attend" : " won't attend"), // Subject
        message.ToString() // Body
        ));
        }

i begge mine web.config filer har jeg så denne kode
web.config
/views/web.config

<system.net>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory">
        <specifiedPickupDirectory pickupDirectoryLocation="f:\email" />
      </smtp>
    </mailSettings>
  </system.net>

og det ligge selvf. i <configuration> delen.

alligevel får jeg denne fejl og denne kode bliver mærkeret som grøn i VS2010.

  smtpClient.Send(new MailMessage(
        "rsvps@example.com", // From
        "party-organizer@example.com", // To
        Name + (WillAttend.Value ? " will attend" : " won't attend"), // Subject
        message.ToString() // Body
        ));
og fejlen er "SMTPexception was unhandled by user code" fandt så ud af at jeg bare lige skulle oprette mappen "email" på mit f drev, men så tænkte jeg på hvilken web.config fil skal det ligge i af de to.
Avatar billede Syska Mester
03. november 2010 - 21:18 #6
Jeg er ret overbevist om det skal være i den første, altså den som er ude i roden.

mvh
Avatar billede aero Nybegynder
03. november 2010 - 22:03 #7
okay jeg takker mange gange, synes der er nogle ret fede ting i MVC især views kontra min gamle brug af SUB's og elsker at det er som PHP ang. www.domæne.dk/kontakt og ikke som før www.domæne.dk/kontakt/default.aspx osv. osv.
Avatar billede Syska Mester
03. november 2010 - 22:34 #8
WebForms har også routing i 4.0

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester