我正在做一个Asp.Net MVC 4项目,我正在寻找我们的api服务的内部请求(如代理).
这就是我的控制器中索引方法的样子.我被困在PostAsync部分.
[HttpPost]
public async Task<ActionResult> Index(FormCollection body){
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("http://myapi.com");
// posts to http://myapi.com/users
var response = await httpClient.PostAsync("users", body);
if(response.isSuccessStatusCode) return Json(new {
status = true,
url = response.Content.Url
});
}
Run Code Online (Sandbox Code Playgroud)
我想将我的"application/x-form-urlencoded""body"内容传递给PostAsync POST方法.但是,我得到一个错误,读取"body不是HttpContent类型".
我不能演员或转换.现在怎么办?
让我知道我在这里做错了什么.
埃里克
我有兴趣知道你们认为应该被视为UpdateModel
ASP.NET MVC 中的方法的"正确行为" .
我在这里问的原因可能是,如果这个功能是"按设计",有人可以澄清为什么它是这样的,也许是一种方式来调用它来实现所需的功能,我想这将是90百分之百的民众希望这个有用吗?
从本质上讲,我的抱怨在于绑定过程中的行为UpdateModel
.
假设您希望通过简单的Save
操作方法更新表单,表单上的数据字段反映了数据库中的模型,最初要保存请求,我们可能会从数据库中获取现有模型,然后更新相关字段哪些更改,发送FormCollection
,然后更新UpdateModel
到我们现有的模型.这个函数,但是看起来这个DB填充对象的任何现有属性都被"重置"; 并且我的意思是,被设置为null或初始化默认值就像它是一个全新的对象,除了显然那些与那些匹配的对象FormCollection
.
这是一个问题,因为对象上存在的任何现有属性,但不一定存在于表单上,例如任何子集合或对象,日期或任何非UI面向字段都是空的,留下半人满,更多或者由于所有丢失的数据(包括现在可能设置为0的ID堆栈)而无法保存到DB的较少的不可用对象.
我认为这不是理想的行为,UpdateModel
只应更新找到属性匹配的属性FormCollection
.这意味着您的所有现有属性都将保持不变,但您的更新将被设置.但是,从目前为止推断的内容来看,显然情况并非如此 - 它似乎实例化了一个全新的对象副本,从表单中更新属性,然后返回新对象.
最后,为了了解这是多少负担,保存半复杂形式并保留所有现有对象数据的唯一方法是手动将每个属性与相应的表单属性结合到绝对保证仅更新表单中存在的属性.
我猜,
请随时提出你对这些家伙的看法,谢谢.
以下是遇到此问题的另一个实例:
使用一组复杂数据类型调用UpdateModel会重置所有非绑定值吗?
给出多个HTML复选框:
<input type="checkbox" name="catIDs" value="1" />
<input type="checkbox" name="catIDs" value="2" />
...
<input type="checkbox" name="catIDs" value="100" />
Run Code Online (Sandbox Code Playgroud)
如何从动作中的FormCollection中检索整数数组:
public ActionResult Edit(FormCollection form)
{
int [] catIDs = (IEnumerable<int>)form["catIDs"]; // ???
// alternatively:
foreach (int catID in form["catIDs"] as *SOME CAST*)
{
// ...
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
注意:我阅读了相关问题,但我不想更改我的操作参数,例如.Edit(int [] catIDs)
.
我的情况是这样的:我有两个列表框,一个包含我的所有数据库项,一个空数据库项.用户将完整列表框中所需的项目添加到空列表框中.
我正在使用表单提交用户添加的所有项目.
问题是,只提交列表框中的选定项目.因此,如果用户取消选择某些项目,则不会在表单中提交.我的观点如下:
<% using (Html.BeginForm("MyAction", "MyController"))
{ %>
<%= Html.ListBox("AddedItems", Model.Items)%>
<input type="submit" value="Submit" name="SubmitButton"/>
<% } %>
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样:
public ActionResult MyAction(FormCollection formCollection)
{
var addedItems = formCollection["AddedItems"].Split(',');
//....more code that does stuff with the items
}
Run Code Online (Sandbox Code Playgroud)
我是否会采取错误的方式?有没有更好的方式来提交物品?你会怎么做?
我发布了一个简单的动作.
public void Login(FormCollection formCollection)
{
...
}
Run Code Online (Sandbox Code Playgroud)
即使查询字符串值很少,formcollection.Count
也为0.这是行为吗?
我的视图在我的ViewModel中有一个Select with elements(选项).
@using (Html.BeginForm("NewUser", "Admin"))
{
<select multiple="" id="inputRole" class="form-control" size="6" name="inputRole">
@foreach (var item in Model.roller)
{
<option>@item.Name</option>
}
</select>
}
Run Code Online (Sandbox Code Playgroud)
如何在Controller中获取所选值?
[HttpPost]
public ActionResult NewUser(FormCollection formCollection)
{
String roleValue1 = formCollection.Get("inputRole");
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个空值.
我目前正在使用新的ASP.NET MVC2框架开发一个应用程序.最初我开始在ASP.NET MVC1中编写这个应用程序,我基本上只是将它更新为MVC2.
我的问题是,我没有真正得到FormCollection对象与旧Typed对象的概念.
这是我目前的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
Member member = new Member();
member.FirstName = collection["FirstName"];
member.LastName = collection["LastName"];
member.Address = collection["Address"];
// ...
return RedirectToAction("Details", new { id = member.id });
}
catch
{
return View("Error");
}
}
Run Code Online (Sandbox Code Playgroud)
这是MVC1应用程序的代码:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Member member)
{
try
{
memberRepository.Add(member);
memberRepository.Save();
return RedirectToAction("Details", new { id = member.id });
}
catch
{
}
return View(new MemberFormViewModel(member, memberRepository));
}
Run Code Online (Sandbox Code Playgroud)
在MVC2中切换到FormCollection有什么好处,更重要的是 - 它是如何正确使用的?
我以前使用过如何在ASP.NET MVC中枚举formcollection?的实施,但现在我在VS2010和MVC2抱怨:
Error 1 Cannot implicitly convert type 'System.Web.Mvc.IValueProvider' to 'System.Collections.Generic.IDictionary'. An explicit conversion exists (are you missing a cast?) C:\~\ProjectMVC\Controllers\TheController.cs line ProjectMVC
代码是......
IDictionary<string, ValueProviderResult> tmpCollection = collection.ToValueProvider();
for (int j = 1; j <= noprops; j++)
{
string shopNmTmp =
(from t in tmpCollection
where t.Key.StartsWith(j + ".discount.sname." + j)
select t.Value.AttemptedValue).First();
string shopCdTmp =
(from t in tmpCollection
where t.Key.StartsWith(j + ".discount.sref." + j)
select t.Value.AttemptedValue).First();
...
Run Code Online (Sandbox Code Playgroud)
当我不看时,有什么改变; 这编译,工作和运行,在MVC1中没有问题; 但不会在2中编译.
谢谢
我通过使用以下技术来解决这个问题:
Dictionary<string, string> …
Run Code Online (Sandbox Code Playgroud) 当我使用此代码作为Web视图时,它工作正常,但是当Chrome中的开发人员选项选择Mobile View时,FormCollection会在控制器中显示空字符串
查看(编辑更新)
<div class="page product-details-page deal-product-details-page">
@using (Html.BeginForm("AddProductToCart_Details", "DealProduct", new { productId = Model.Id, shoppingCartTypeId = 1 }, FormMethod.Post))
{
<div class="page-body">
@using (Html.BeginRouteForm("Product", new { SeName = Model.SeName }, FormMethod.Post, new { id = "product-details-form" }))
{
@{
var dataDictAttributes = new ViewDataDictionary();
dataDictAttributes.TemplateInfo.HtmlFieldPrefix = string.Format("attributes_{0}", Model.Id);
@Html.Partial("~/Views/Product/_ProductAttributes.cshtml", Model.ProductAttributes, dataDictAttributes)
}
<!--gift card-->
@{
var dataDictGiftCard = new ViewDataDictionary();
dataDictGiftCard.TemplateInfo.HtmlFieldPrefix = string.Format("giftcard_{0}", Model.Id);
@Html.Partial("~/Views/Product/_GiftCardInfo.cshtml", Model.GiftCard, dataDictGiftCard)
}
<!--rental info-->
@{
var dataDictRental = new ViewDataDictionary();
dataDictRental.TemplateInfo.HtmlFieldPrefix = string.Format("rental_{0}", …
Run Code Online (Sandbox Code Playgroud) 我在mvc控制器中收到一些数据作为FormCollection.我想检查formcollection中是否存在特定的密钥.
public JsonResult FullRetailerUpdate(FormCollection data)
{
//I want to check if
//data["AnElement"] is exist
}
Run Code Online (Sandbox Code Playgroud)
请帮忙.
formcollection ×10
asp.net-mvc ×7
c# ×4
asp.net ×2
c#-3.0 ×1
checkbox ×1
html ×1
listbox ×1
razor ×1
select ×1
updatemodel ×1