我正在创建一个网站,用户可以在表单中输入网页地址。我打算检查网址格式是否正确,就像我认为是一种草率的方式的实际网址,而我想检查网址是否属于一个真实的网站。比如,让我们说用户输入www.pyrtyrmyrsyr.org,这是一个有效的地址,但它不会导致网站。让我们说用户输入www.python.org,这是一个有效的地址,并通向一个存在的网站。
如何在发送表单之前和输入之后检查此有效性?制作表格"发送"如果网址无效,按钮无法点击?
编辑:已实现我没有添加任何我的观点代码,为此道歉,也忘了提及我使用Bootstrap for View。
这是我使用的形式,我要做的是使用" Check"按钮,检查有效性,在表格控件中使用" id = url"
<div>
<div class="row">
<div class="col-md-12">
<h2 style="margin-left:20px; margin-top:10px">Add a Link</h2>
<form action="~/Link/Create" method="post">
<div class="form-group well clearfix" style="margin-left:20px; margin-right:20px; margin-top:20px">
<br />
<div class="row">
<label for="name" class="col-lg-2">URL:</label>
<div class="col-lg-9">
<input class="form-control" id="url" placeholder="URL" name="Address" /><br />
</div>
<div class="col-lg-1">
<button type="button" class="btn btn-primary" id="checkurl">Check</button>
</div>
</div>
<div class="row">
<div class="col-lg-2">
<label for="name">Interval:</label>
</div>
<!--<div class="col-lg-10">
<input class="form-control" placeholder="Interval to check (minutes)" name="Interval" /><br />
</div>-->
<div class="col-lg-5">
<select class="form-control" id="sel1">
<option>Minutes</option>
<option>Hours</option>
<option>Days</option>
<option>Weeks</option>
<option>Months</option>
</select>
</div>
<div class="col-lg-5">
<select class="form-control" id="sel2">
<option>Minutes</option>
<option>Hours</option>
<option>Days</option>
<option>Weeks</option>
<option>Months</option>
</select>
</div>
</div>
<div class="row">
<button class="btn btn-success pull-right" type="submit" style="width:200px; margin-right:15px">Save</button>
</div>
</div>
</form>
</div>
</div>
</div>
据我搜索到目前为止,使用Javascript或类似的东西无法连接到另一个域/网站,所以我需要一个服务器端语言,所以我需要拿这个url,发送它来控制并返回一个true检查连接后的/ false值。
答案 0 :(得分:1)
您可以在Asp.NET MVC中使用远程验证。让您在模型中拥有以下属性。
public string URL {get; set;}
将Remote属性添加到您的媒体资源中,例如
[Remote("YourAction", "YourController", HttpMethod = "GET", ErrorMessage = "URL is not valid.")]
public string URL {get; set;}
现在在控制器的指定操作中编写以下代码。
public class YourController : Controller
{
[AllowAnonymous]
public ActionResult YourAction(string URL)
{
try
{
//Check here by hitting your URL using HTTPClient or WebClient that it is returning something or not.
WebClient wc = new WebClient();
string HTMLSource = wc.DownloadString(URL);
return Json(true, JsonRequestBehavior.AllowGet); //Return true if it is valid.
}
catch (Exception)
{
return Json(false, JsonRequestBehavior.AllowGet); //Return false if it is not vald.
}
}
}
您必须在web.config中添加以下配置
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
您在视图中的代码就像
@Html.EditorFor(model => model.URL, new { type = "url", @class = "form-control", placeholder = "URL" } })
@Html.ValidationMessageFor(model => model.URL, "", new { @class = "text-danger" })
答案 1 :(得分:0)
解决了它:
在我的模型中添加了一个bool:
public bool Valid { get; set; }
稍微改变了我的观点:
<div class="row">
<label for="name" class="col-lg-2">URL:</label>
<div class="col-lg-9">
<input class="form-control" id="url" placeholder="URL" name="Address" /><br />
</div>
<div class="col-lg-1">
<button type="button" class="btn btn-primary pull-right" id="checkurl">Check</button>
</div>
<input type="hidden" name="Valid" id="Validity"/>
</div>
使用以下代码,一个用于检查有效性,另一个用于在输入更改时重置可用的表单
$('#checkurl').click(function () {
var address = $('#url').val();
$.ajax({
url: "/Control/CheckUrl",
type: "POST",
data: JSON.stringify({ url: address }),
cache: false,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
if (result) {
document.getElementById("Validity").value = true;
document.getElementById("saveBut").disabled = false;
}
else {
document.getElementById("Validity").value = false;
document.getElementById("saveBut").disabled = true;
}
},
async: true,
processData: false
});
});
$('#url').change(function ()
{
if (document.getElementById("saveBut").disabled == false)
{
document.getElementById("Validity").value = false;
document.getElementById("saveBut").disabled = true;
}
});
Ajax代码导致控制器函数重新格式化URL并检查有效性:
public ActionResult CheckUrl(string url)
{
try
{
if (String.IsNullOrEmpty(url)) return Json(false, JsonRequestBehavior.AllowGet); ;
if (url.Equals("about:blank")) return Json(false, JsonRequestBehavior.AllowGet); ;
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "http://" + url;
}
WebClient wc = new WebClient();
string HTMLSource = wc.DownloadString(url);
return Json(true, JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
它完美无瑕地工作。