我需要上传文件发送额外的参数.
我在stackoverflow中找到了以下帖子:带有额外参数的Webapi ajax formdata上传
它描述了如何使用MultipartFormDataStreamProvider并将数据保存到文件服务器.我不需要将文件保存到服务器,而是保存到DB.我已经使用MultipartMemoryStreamProvider处理代码,但它不使用额外的参数.
你能告诉我如何在webapi中处理额外的参数吗?
例如,如果我添加文件并测试参数:
data.append("myParameter", "test");
Run Code Online (Sandbox Code Playgroud)
这是我的webapi处理fileupload而没有额外的参数:
if (Request.Content.IsMimeMultipartContent())
{
var streamProvider = new MultipartMemoryStreamProvider();
var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable<FileModel>>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
_fleDataService = new FileDataBLL();
FileData fle;
var fleInfo = streamProvider.Contents.Select(i => {
fle = new FileData();
fle.FileName = i.Headers.ContentDisposition.FileName;
var contentTest = i.ReadAsByteArrayAsync();
contentTest.Wait();
if (contentTest.Result != null)
{
fle.FileContent = contentTest.Result;
}
// get extra parameters here ??????
_fleDataService.Save(fle);
return new FileModel(i.Headers.ContentDisposition.FileName, 1024); //todo
}); …Run Code Online (Sandbox Code Playgroud) 我在页面上有菜单,div是绝对定位的.问题是当这个div在页面上时,我无法点击菜单项中的任何链接.
当我删除这个div(#left_border)时,可以再次点击链接.
为什么?
CSS:
#left_border {
background-image: url(http://tax.allfaces.lv/templates/tax/images/ena.png);
background-position: 0 0;
background-repeat: no-repeat;
width: 1094px;
background-size: 100% auto;
position: absolute;
height: 850px;
left: -51px;
top: 0px;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div id="wrapper">
<div id="content">
<div id="left_border"></div>
<div id="left">
<div id="menu">
<ul class="menu">
<li class="item-101 current active deeper parent"><a href="/">Home</a>
<ul>
<li class="item-107"><a href="/index.php/home/news">News</a>
</li>
</ul>
</li>
<li class="item-102 deeper parent"><a href="/index.php/merchants-shops">Merchants / Shops</a>
</li>
</ul>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
在这里,您看到,您无法单击菜单项:http://jsfiddle.net/Dq6F4/
我正在使用tinymce编辑器.我正在使用默认工具栏.我的意思是我没有指定任何额外的工具栏:
<script type="text/javascript">
tinymce.init({
selector: "textarea",
height: 400,
statusbar: false,
menubar:false
});
</script>
Run Code Online (Sandbox Code Playgroud)
但是,现在我想将"font-size"和"table"工具栏添加到默认值.我能找到默认工具栏的某个地方吗?
以下是默认编辑器的外观:

我试图通过自己创建工具栏选项,但我从来没有像默认情况下那样.所以我想找到默认的tinymce工具栏规范并添加"table"和"fontsize"选项.
我有接受的通用方法,"T" type这是枚举器.在方法内部,我必须在枚举器类型上调用辅助类方法和方法名称depands.
public Meth<T> (T type) {
if (typeof(T) == typeof(FirstEnumType)) {
FirstEnumType t = ??? // I somehow need to convert T type to FirstEnumType
this.helperFirstCalcBll(t);
}
else
{
SecondEnumType t = ??? // I somehow need to convert T type to SecondEnumType
this.helperSecondCalcBll(t);
}
}
Run Code Online (Sandbox Code Playgroud) 我想使用这种技术:在knockout上创建一个仅输入数字类型
允许用户只输入数字.
但是,此技术不会更新UI上的可观察值.
HTML:
<span data-bind="text: Interval" ></span>
<input data-bind="numeric: Interval" />
Run Code Online (Sandbox Code Playgroud)
捆绑:
ko.bindingHandlers.numeric = {
init: function (element, valueAccessor) {
$(element).on("keydown", function (event) {
// Allow: backspace, delete, tab, escape, and enter
if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: . ,
(event.keyCode == 188 || event.keyCode == 190 || event.keyCode == …Run Code Online (Sandbox Code Playgroud) 我有一个有很多输入的表格.
我在表单中使用以下语法:<!-- ko if: PropertyName -->.我在特定字段的表单中使用此语句.这允许我隐藏未定义的值(实际上不隐藏,但从DOM中删除).
但是,我不需要动态隐藏它们.我的意思是,当值不为空且已加载时,用户可以编辑它,用户可以清空它.在这种情况下输入消失,我不需要这个.
你能建议我 - 如何改变我的标记和使用什么绑定?
<!-- ko if: IsEmptyOnLoad(Property1) -->.
<input type="text" data-bind="value: Property1" />
<!-- /ko -->
<!-- ko if: IsEmptyOnLoad (Property2) -->.
<input type="text" data-bind="value: Property2" />
<!-- /ko -->
var myModel = function() {
var self = this;
self.Property1= ko.observable("non-empty");
self.Property2= ko.observable();
//self.IsEmptyOnLoad is not implemented, how to implement?
};
var m = new myModel();
ko.applyBindings(m);
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用相应的JSFiddle.
这可能很奇怪,但我确实有业务场景:
如何向GridView行添加ID(应该呈现ID)?
我正在使用.NET(C#).我有GridView控件.
我有一些操作表行的javascript函数,但是必须为这些行设置ID:
<table>
<tr id=1> ...
<tr id=2> ... //id should come from database
..
Run Code Online (Sandbox Code Playgroud)
我的GridView源自DataBase中的Data.重要的是不要有FAKE ROW IDS,而是真正来自DB的行ID(有一些ajax javascript函数可以根据这些ID和用户对表的操作来更新DB).
我的部分GridView如下:
<asp:GridView ID="grdNews" runat="server" BorderStyle="None" RowStyle-BorderStyle="None"
GridLines="None" CssClass="table" Style="white-space: nowrap" AutoGenerateColumns="False"
DataKeyNames="ID" AllowSorting="True" AllowPaging="true" OnSorting="grdNews_Sorting" OnRowDataBound="grdNews_RowDataBound">
<RowStyle BorderStyle="None" />
<HeaderStyle CssClass="nodrag" />
<Columns>
....
Run Code Online (Sandbox Code Playgroud)
我尝试过以下方法:
protected void grdNews_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.ID = grdNews.DataKeys[e.Row.RowIndex].Value.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
这为e.Row.ID提供了正确的值,但这不会呈现此ID.
那么,如何在GridView中从DataBase for Rows呈现ID?
在以下场景中form使用引导程序设置样式的正确方法是什么:

我需要使用fieldset(将在以后设置样式)
我需要form分成两列
每列都有标签+控件,有些会有标签+ control1 + control2等.
我是bootstrap的新手.我来到以下解决方案(jsfiddle).
问题是:这是正确的方法吗?它是否违反了引导语义?
我不明白何时使用form-group,我是否正确使用它?
我不应该在这里包含一些class="row"正确的语义吗?
HTML:
<div class="container">
... <some content here> ....
<form class="form-horizontal">
<fieldset>
<legend>Portfolio</legend>
<div class="col-xs-6">
<div class="form-group">
<label for="name" class="col-xs-4 control-label">Label1</label>
<div class="col-xs-8">
<input type="text" class="form-control" placeholder="control1" />
</div>
</div>
<div class="form-group">
<label for="name" class="col-xs-4 control-label">label2</label>
<div class="col-xs-8">
<input type="text" class="form-control" placeholder="control2" />
</div>
</div>
<div class="form-group">
<label for="name" class="col-xs-4 control-label">label3</label>
<div …Run Code Online (Sandbox Code Playgroud) 我想要实现的是为模型属性创建订阅.此订阅函数应通过Ajax更新数据库中的属性值来调用WebApi.对于ajax调用,我需要三个参数:" fieldName"," fieldValue"和" modelId",ajax将根据这三个参数更新数据库行.
我有很多属性,所有属性都需要相同的功能,所以我不想单独订阅每个属性,所以我找到了以下建议:
ko.subscribable.fn.withUpdater = function (handler) {
var self = this;
this.subscribe(handler);
//support chaining
return this;
};
Run Code Online (Sandbox Code Playgroud)
添加它是如何"附加"到observables:
self.ModelId= ko.observable();
self.CompanyName = ko.observable().withUpdater(update);
Run Code Online (Sandbox Code Playgroud)
这里update是模型之外的一些js函数.
但是,我有问题,因为我无法将三个参数传递给update函数(或者我可以用另一个词来说 - 我需要能够获得viewModel.ModelId内部的属性值update,以及propertyName).
function update (propertyName, propertyNewValue, anotherPropertyValue) {
//do ajax update
}
Run Code Online (Sandbox Code Playgroud)
作为CompanyName属性的示例,它将是:
update("CompanyName", "New Company value here", 3),
Run Code Online (Sandbox Code Playgroud)
哪里
3 == viewModel.ModelId
Run Code Online (Sandbox Code Playgroud) 我无法在.net c#中上传文件.我使用以下代码:
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var file in provider.Contents)
{
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Resources");
var dataStream = await file.ReadAsStreamAsync();
FileStream fileStream = File.Create(mappedPath, (int)dataStream.Length);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent("Successful upload", Encoding.UTF8, "text/plain");
response.Content.Headers.ContentType = new MediaTypeWithQualityHeaderValue(@"text/html");
return response;
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e.Message);
}
Run Code Online (Sandbox Code Playgroud)
这发生在localhost上.我有"访问路径...被拒绝"错误.我试图更改文件夹"资源"的安全权限,但可能我不知道添加完全控制的组/用户名.
我试过了:
c# ×3
javascript ×3
jquery ×3
knockout.js ×3
css ×2
file-upload ×2
html ×2
.net ×1
ajax ×1
asp.net ×1
enums ×1
form-data ×1
tinymce ×1