我正在尝试使用Knokout JS和web api来上传图片。以下是我的代码:
我将使用这个自定义绑定:
有没有想法如何做到这一点?
<div class="row">
<div class="col-sm-4">
<h3>Send Feedback</h3>
<form data-bind="submit: sendFeedback">
<div class="form-group">
<label>Feedback</label>
<textarea class="form-control" data-bind="value: feedbackText"></textarea>
</div>
<div class="form-group">
<label>Version Id</label>
<input class="form-control" type="text" data-bind="value: versionId" />
</div>
<div class="form-group">
<label>Image</label>
<input class="form-control" type="file"
data-bind="file: {data: fileInput, name: fileName, reader: someReader}" />
</div>
<div class="form-group">
<button type="submit" class="btn btn-default">Submit</button>
</div>
</form>
</div>
我将使用这个自定义绑定:
https://github.com/TooManyBees/knockoutjs-file-binding
然后在我的脚本代码中,我执行以下操作:I am using this custom binding
self.sendFeedback = function () {
self.result('');
var feedBackData = {
versionId: self.versionId(),
text: self.feedbackText(),
screenShot: self.fileInput
};
$.ajax({
type: 'POST',
url: apiUrl + '/Feedback/Add',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(feedBackData)
}).done(function (data) {
self.result("Done!");
}).fail(showError);
}
我对代码的服务器部分不确定。我目前已经写了这部分内容:
public void Add(HttpPostedFileBase screenShot, String versionId, String text)
{
String imgId = null;
int count = HttpContext.Current.Request.Files.Count;
if (screenShot != null && screenShot.ContentLength > 0)
{
Images img = Images.Create().Save();
imgId = img.Id;
BlobHelper.PutFile(imgId, screenShot.InputStream);
}
Feedback.Create(versionId, text, imgId).Save();
}
有没有想法如何做到这一点?
ko.toJSON()
而不是JSON.stringify
- observables 是函数,不会被返回。请参考 http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html。 - QuangofileInput
中,但是在控制器中你使用了HttpPostedFileBase
- 这样混合不同的方法。由于发布的脚本只是部分内容,所以很难添加更多信息。 - Quango