首先,我昨天从好人那里得到了一些帮助,帮助我决定采取什么方法:http://stackoverflow.com/questions/24832038/pass-newly-created-object-to-partial-view/24834225#24834225
要点: 我得到了一些Ajax调用创建对象的方法。我想使用Ajax成功消息用我的新对象替换div中的内容。这是Ajax:
$("#btnSaves").click(function () {
var image = document.getElementById("canvas").toDataURL("image/png");
image = image.replace('data:image/png;base64,', '');
$.ajax({
type: 'POST',
url: "../../Home/UploadImageS", //THIS METHOD CREATES AN OBJECT
data: '{ "imageData" : "' + image + '" }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (?) {
HERE I NEED CODE THAT RENDERS A PARTIAL VIEW PASSING THE OBJECT AS A PARAMETER.
}
});
});
这是控制器,我不确定它的返回值应该是什么:
public ActionResult UploadImageS(string imageData)
{
string fileNameWitPath = path + DateTime.Now.ToString().Replace("/", "-").Replace(" ", "- ").Replace(":", "") + ".png";
using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
{
using (BinaryWriter bw = new BinaryWriter(fs))
{
byte[] data = Convert.FromBase64String(imageData);
bw.Write(data);
bw.Close();
}
}
string link = UploadImage(fileNameWitPath);
JObject o = JObject.Parse(link);
string name = (string)o.SelectToken("data.link");
var db = new ArtContext();
var nyArt = new ArtWork()
{
ArtLink = name,
};
db.ArtWorks.Add(nyArt);
db.SaveChanges();
Return ??
}
}
我对使用Ajax感到不舒服,所以如果可能的话,我也会感谢一些解释。
这是我的方法返回的内容:
return View("TestView",nyArt);
在没有布局的情况下创建的testview:
@model Heroz.Models.ArtWork
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>TestView</title>
</head>
<body>
<div>
<img src="@Model.ArtLink"/>
</div>
</body>
</html>
现在,当我把一个brekpoint放在:
return View("TestView",nyArt);
我没有进入&#34;&#34; TestView&#34;,它直接进入_Layout。
答案 0 :(得分:1)
我认为您正在寻找的是从您的AJAX调用返回的一些HTML,然后您可以在现有元素内部渲染。这是对的吗?
如果是这样,最简单的方法是构造一个包含正确模型的视图,并从方法中返回它。因此,您可以编写一个视图,其中包含仅您要返回的HTML(没有布局页面或任何内容),然后使用return View();
正常返回。
让我们说(例如)您想要返回一些使用您在操作中创建的nyImage
对象的HTML。您将使用HTML创建视图并指定要使用的模型(在本例中为nyImage
的类型)。
编辑:我使用razor输出模型的name
属性,我相信这是图像主机网站上艺术的完整链接。
@model ArtWork
@{
Layout = null;
}
<div>
<img src="@Model.name" />
</div>
然后你将这个视图保存为你想要的任何名称,让我们说TestView
。然后在你的action方法中,你将返回这个视图,传入模型:
return View("TestView", nyArt);
这将返回包含视图/模型生成的HTML的ViewResult
。
在客户端上,您将以HTML格式返回此数据,然后如果您希望显示该页面元素,则可以将其附加到页面元素:
success: function (ret) {
//do something with ret here
$('#myDiv').html(ret);
HERE I NEED CODE THAT RENDERS A PARTIAL VIEW PASSING THE OBJECT AS A PARAMETER.
}
以上代码段将#myDiv
的内容替换为从AJAX调用返回的HTML。