啊啊啊啊 這個東西實在很蛋疼啊 每次訪問webapi就很老火 這里就一下 以后忘記的話就來查閱
不多說 直接開始
首先html頁面 新建一個基於layui的form表單頁面LayuiForm.cshtml(我的項目是基於mvc的 當然webform也是可以的 就不寫了 個人習慣webform做前台的時候后台用一般處理程序.ashx來搭配)。
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>LayuiForm</title>
<link href="~/Scripts/layui/css/layui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-3.3.1.js"></script>
<script src="~/Scripts/layui/layui.js"></script>
</head>
<body>
<form class="layui-form" action="" method="post">
<div class="layui-form-item">
<label class="layui-form-label">輸入框</label>
<div class="layui-input-inline">
<input type="text" name="fnTitle" required lay-verify="required" placeholder="請輸入標題" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密碼框</label>
<div class="layui-input-inline">
<input type="password" name="fnPassWord" required lay-verify="required" placeholder="請輸入密碼" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">選擇框</label>
<div class="layui-input-inline">
<select name="fnCity" lay-verify="required">
<option value=""></option>
<option value="0">北京</option>
<option value="1">上海</option>
<option value="2">廣州</option>
<option value="3">深圳</option>
<option value="4">杭州</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">單選框</label>
<div class="layui-input-inline">
<input type="radio" name="fnSex" value="男" title="男">
<input type="radio" name="fnSex" value="女" title="女" checked>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">文本域</label>
<div class="layui-input-inline">
<textarea name="fnSumarry" placeholder="請輸入內容" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
<script>
layui.use('form', function () {
var form = layui.form;
form.on('submit(formDemo)', function (data) {
//alert(JSON.stringify(data.field));
$.ajax({
type: "post",
url: "/api/WebApi/PostAddFormLearn",
data: data.field,
success: function (responseTxt) {
if (responseTxt.msg == "OK") {
layer.msg("提交成功");
} else {
layer.msg("提交出錯");
}
}
});
return false;
});
});
</script>
</body>
</html>
前台頁面建好了 這里有一個很重要的一點 假如你的表單不指定他的提交方式的話(即method = "post"或者method="get") html默認的提交方式是get.
我們這里采用的是post方法 接下來 在webapi中新建方法接受參數。
后台方法:
public IHttpActionResult PostAddFormLearn(FormLearning f)
{
try
{
LearningEntities db = new LearningEntities();
db.FormLearning.Add(f);
db.SaveChanges();
return Ok(new { msg = "OK" });
}
catch (Exception ex)
{
return Ok(new { msg=ex.Message});
}
finally
{
}
}
這里有個需要注意的點 ,在訪問webapi接口的時候 如果訪問post 而且只有一個參數的情況下 需要用到frombody關鍵字。
對訪問webapi我做了幾個例子放在這里方便對比
第一種:不帶參數的get 請求。
前台:
$("#test1").click(function () {
$.ajax({
type: "get",
url: "/api/WebApi/getList",
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string getList()
{
return "ok";
}
第二種:一個參數的get請求
前台:
$("#test2").click(function () {
var parm = 1;
$.ajax({
type: "get",
url: "/api/WebApi/getListWithOneParm",
data: { id: parm },
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string getListWithOneParm(int id)
{
return id.ToString();
}
第三種:多個參數的get請求
前台:
$("#test3").click(function () {
var parm = { "Name": "張麗", "Sex": "男" };
$.ajax({
type: "get",
url: "/api/WebApi/getListWithThreeParm",
data: parm,
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string getListWithThreeParm(string Name, string Sex)
{
return "Name:" + Name + "," + "Sex:" + Sex;
}
接下來是post的各種惡心的東西。。。
繼續
第一種 不帶參數的post請求
前台:
$("#test4").click(function () {
$.ajax({
type: "post",
url: "/api/WebApi/PostList",
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string PostList()
{
return "ojbk";
}
第二種 帶有一個參數的post
前台:
$("#test5").click(function () {
$.ajax({
type: "post",
data: { "name": "張三" },
url: "/api/WebApi/PostListOneparm",
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string PostListOneparm([FromBody]string name)
{
return "OKAA";
}
第三種:
帶多個參數的post (其實就是當作傳進來一個類接受就行了)
前台:
$("#test6").click(function () {
var parm = {"name":"zhangsan","age":20}
$.ajax({
type: "post",
data: parm,
url: "/api/WebApi/PostListThreeparm",
success: function (responseText) {
alert(responseText);
}
});
});
后台:
public string PostListThreeparm(Person p)
{
return p.name;
}