MVC新手。
情景是。使用第三方上传库获取图像。提交表单时,我想通过ajax进行调用以提交数据并返回插入的项目ID。然后,我将该ID用于第三方上传库,以构建将图像上传到的文件夹。
我有ajax调用工作并将数据插入数据库并获取插入的id。但是当调试从控制器返回时,它会将id作为整个页面呈现。
我认为在MVC中缺少一些基本的东西。
cshtml文件:
<div class="col-md-8">
<input type="submit" value="Add Item" id="submitItem" />
<script>
$(document).ready(function () {
$("#submitItem").submit(function () {
event.preventDefault();
insertData();
});
});
function insertData()
{
var requestData = {
userID: $("#hdnUserID").val(),
title: $("#title").val(),
typeID: $("#typeID").val(),
description: $("#description").val()
};
$.ajax({
url: '<%= Url.Action("ItemUserDashBoard", "Home") %>',
type: 'post',
data: JSON.stringify(requestData),
dataType: 'json',
success: function (data) {
// your data could be a View or Json or what ever you returned in your action method
// parse your data here
alert(data);
$("#fine-uploader-gallery").fineUploader("uploadStoredFiles");
},
processData: false
});
}
</script>
</div>
HomeController.cs
[HttpPost]
public JsonResult ItemUserDashBoard(ItemAppraise.Models.iaDashBoardModel objItemUserDashBoard)
{
if(ModelState.IsValid)
{
using (dbContext)
{
ia_items iaItem = new ia_items
{
userID = objItemUserDashBoard.iaItems.userID,
typeID = objItemUserDashBoard.iaItems.typeID,
title = objItemUserDashBoard.iaItems.title,
description = objItemUserDashBoard.iaItems.description,
lastUpdate = DateTime.Now
};
dbContext.ia_items.Add(iaItem);
dbContext.SaveChanges();
//objItemUserDashBoard.iaItems.itemID = iaItem.itemID;
return Json(iaItem.itemID.ToString());
}
}
else{
return null;
}
}
Fiddler将其显示为具有Content-Type标题:application / json;字符集= UTF-8。
但页面会在控件网址“http://localhost:55689/Home/ItemUserDashBoard”下呈现,只显示商品ID。
如何将数据恢复为仅用于ajax调用的成功部分而不进行渲染?是部分观点还是类似的东西?
感谢任何指导。
答案 0 :(得分:1)
在标准MVC中。对控制器的任何调用都像Web请求一样处理。所以,如果我理解正确 - 你的httpPost的结果是渲染而不是所需的视图?这是因为您正在返回JSON,因此控制器假定您正在尝试渲染。如果您想要呈现视图(并以某种方式使用该响应数据),您可以尝试将返回类型设置为ActionResult
并返回View("nameofview");
您可以将响应数据传递给2017-09-28 16:05:26.452999+0900 MiFollowers WatchKit Extension[4628:4012814] [bg_app_refresh] -[WKRefreshBackgroundTask cleanupStorage]_block_invoke:213: Error attempting to reach file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null): Error Domain=NSCocoaErrorDomain Code=260 "The file “bktaskapp_(null)” couldn’t be opened because there is no such file." UserInfo={NSURL=file:///Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSFilePath=/Users/ryuuzaki/Library/Developer/CoreSimulator/Devices/2E4D6389-93B7-4542-B07F-9A02C720B9AF/data/Containers/Data/PluginKitPlugin/FA4415DF-D984-4394-80B9-EDA199AB587E/Library/com.apple.watchkit/bktaskapp_(null), NSUnderlyingError=0x79b0e340 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
中的视图{3}}
作为旁注我认为使用number of ways而不是MVC可以更好地解决您遇到的问题。它适用于MVC,可以是实现所需功能的更简单方法。将您的发布请求和数据库交互与决定返回哪个View的逻辑分开。