Ich baue zum ersten Mal eine MVC-App. Derzeit stellt meine App ein kleines Formular bereit, das dem Benutzer eine Eingabezeichenfolge (eine URL) und eine Submit-Anweisung zur Verfügung stellt, die Eingabe des Benutzers verwendet, um einen neuen Datensatz in der db-Tabelle zu erstellen und eine saubere URL auszugeben. Ich möchte eine Bedingung in meinem Homecontroller-Datei hinzufügen, dass wird:MVC, Aktion für Controller
1) überprüfen, ob die „url“ Eingabe bereits in der Datenbanktabelle vorhanden und 2) Wenn ja, wird dieser Rekord Verse zeigen einen doppelten Datensatz zu schaffen .
Index View --------------------
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<div>
<form action="/Home/Create" method="post">
Enter: <input type="text" name="urlToShorten" id="shortenUrlInput" />
<input type="submit" value="Shorten" />
</form>
</div>
</body>
</html>
Create View ------------------------------------------------------------
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<div>
The clean url:<br />
<%= string.Format("{0}/{1}",Request.Url.GetLeftPart(UriPartial.Authority),ViewData["shortUrl"]) %>
</div>
</body>
</html>
Homecontroller----------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using ShortUrl.Models;
namespace ShortUrl.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HandleError]
public ActionResult Create(string urlToShorten)
{
if (string.IsNullOrEmpty(urlToShorten))
{
return RedirectToAction("Index");
}
else
{
long result = ShortUrlFunctions.InsertUrl(urlToShorten);
ViewData["shortUrl"] = result;
return View("Create");
}
}
[HandleError]
public ActionResult Resolve(long? id)
{
if (!id.HasValue || id.Value == 0)
{
return RedirectToAction("Index");
}
else
{
string url = ShortUrlFunctions.RetrieveUrl(id.Value);
if (url == null)
{
return RedirectToAction("Index");
}
else
{
return Redirect(url);
}
}
}
}
}
------------ShortUrlFunctions.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ShortUrl.Models
{
public static class ShortUrlFunctions
{
public static string RetrieveUrl(long inputKey)
{
using (ShortUrlEntities db = new ShortUrlEntities())
{
var existingUrl = (from t in db.ShortURLSet where
t.id == inputKey select t).Take(1);
if (existingUrl.Count() == 1)
{
return existingUrl.First().url;
}
else
{
return null;
}
}
}
public static long InsertUrl(string inputUrl)
{
long result = 0;
if(!string.IsNullOrEmpty(inputUrl))
{
using (ShortUrlEntities db = new ShortUrlEntities())
{
if (inputUrl.IndexOf(@"://") == -1) inputUrl =
"http://" + inputUrl;
ShortURL su = new ShortURL();
su.url = inputUrl;
db.AddToShortURLSet(su);
db.SaveChanges();
result = su.id;
}
}
return result;
}
}
}
Was genau ist Ihre Frage? Erhalten Sie einen Fehler? –
Wo ist das Modell? Das ist der Punkt, an dem der Großteil des Condition Testings (das Filtern von Müll in der Steuerung ist in Ordnung) sollte und definitiv dort sein sollte, wo die Bedingungserhöhung leben sollte (die der Controller in ModelState verpacken und zurückgeben kann). – 48klocs