嘿伙计们,我需要输出我的模型作为json,一切都很顺利.但是,某些属性需要通过一些辅助方法过滤它们来"美化",例如number_to_human_size.我该怎么做呢?
换句话说,说我有一个属性命名bytes,我想通过它传递number_to_human_size,并有那结果输出到JSON.
如果可能的话,我还想'修剪'输出为json的输出,因为我只需要一些属性.这可能吗?有人可以举个例子吗?我真的很感激.
初步搜索结果提示某些事情as_json,但我无法找到与我的情况有关的实际例子.如果这真的是解决方案,我真的很感激一个例子.
研究:似乎我可以使用to_json的选项明确说明我想要哪些属性,但是我仍然需要在输出之前通过传递一个帮助器来弄清楚如何"美化"或"过滤"某些属性作为json.
我会为单个json模型创建一个部分,所以_model.json.erb,然后为我正在使用的动作创建另一个,并在其中简单地使用对象集合渲染部分?看起来像一堆箍跳过.我想知道是否有更直接/原始的方式来改变模型的json表示.
我正在为我的datepicker创建自定义html帮助器.
我想传递内部模式,因为它是TextBoxFor(model => model.name)
所以我需要的是,但我不知道该怎么做
我创造了
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression){
//return object.name
var expressionText = ExpressionHelper.GetExpressionText(expression);
}
Run Code Online (Sandbox Code Playgroud) 我想做这个
@Html.TextBoxFor(x => x.BackgroundColor, new { style = "width: 20px; background-color: @Model.BackgroundColor;" })
Run Code Online (Sandbox Code Playgroud)
然而,它不会呈现我的Mode.Background颜色(在firebug中我只看到@ bModel.BackgroundColor").这可能吗?
我有一个像这样的扩展方法:
namespace System.Web.Mvc.Html
{
public static class HtmlExtensions
{
public static T GetEnumValue<T>(this HtmlHelper helper, int value) where T : struct, IConvertible
{
return EnumHelper<T>.GetEnumValue(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在Razor View上调用这个方法(该方法的自动完成工作,它在视图中可见),但是我收到错误:
@Html.GetEnumValue<MyEnumHere>(1) //Getting error here
Run Code Online (Sandbox Code Playgroud)
错误: Cannot convert method group 'GetEnumValue' to non-delegate type 'object'. Did you intend to invoke the method?
如果我这样 - 在编译期间没有错误:
Html.GetEnumValue<MyEnumHere>(1) //but in that case didnt get data to display.
Run Code Online (Sandbox Code Playgroud)
如果说谎的话,在编译期间也不会出错
@{
Html.GetEnumValue<MyEnum>(1); //But then I am getting error during execution
}
Run Code Online (Sandbox Code Playgroud)
错误: No …
我已经使用附加参数进行了标签扩展,但是当我使用ViewData.ModelMetadata.DisplayName时,我没有从模型上的Diaplsy属性中获取显示名称?
我的模型有这样的用户名
[Display(Name = "User name")]
public string UserName { get; set; }
Run Code Online (Sandbox Code Playgroud)
并像这样使用
@Html.LabelFor(m => m.SetupModel.UserName, @<span>No fancy characters mmkay?</span>)
Run Code Online (Sandbox Code Playgroud)
用这个html助手
public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex, Func<object, HelperResult> template, string labelText = null) {
var htmlFieldName = ExpressionHelper.GetExpressionText(ex);
var metadata = htmlHelper.ViewData.ModelMetadata;
string resolvedLabelText = labelText ?? metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
if (String.IsNullOrEmpty(resolvedLabelText)) {
return MvcHtmlString.Empty;
}
var tag = new TagBuilder("label");
tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
tag.InnerHtml = string.Format(
"{0} {1}",
resolvedLabelText,
template(null).ToHtmlString()
);
return …Run Code Online (Sandbox Code Playgroud) 因此,我试图将.cshtml视图中的此剃刀语法转换为.cs中的帮助程序扩展名。Darin在此发表了一篇很棒的文章:https : //stackoverflow.com/a/8187441/1026459。但是,我在使其工作时遇到了一些问题。
这是简单的标记
@using (Html.BeginForm("Restore", "GlobalCrud"))
{
@Html.Hidden("entityId", "Id")
<input class="ui-icon ui-icon-power" type="submit"
onclick="return confirm('Clicking OK will restore this record');"
/>
}
Run Code Online (Sandbox Code Playgroud)
这是扩展
public static MvcHtmlString EditOrDelete(this HtmlHelper html)
{
var s = html.BeginForm();
return MvcHtmlString.Create(s + " additional fields " + "</form>");
}
Run Code Online (Sandbox Code Playgroud)
这是用途:
@using namespace.CustomHelper
@Html.EditOrDelete()
Run Code Online (Sandbox Code Playgroud)
这是输出:
<form method="post" action="/Completed/Manage">
System.Web.Mvc.Html.MvcForm additional fields
</form>
Run Code Online (Sandbox Code Playgroud)
大多数情况下,辅助扩展可以满足我的需求。但是,我不确定如何将其转换回正确的html字符串。返回内容包括System.Web.Mvc.Html.MvcForm在文本中。我在" additional fields "这里添加简洁是因为那里没有问题。</form>之所以using要@Html.BeginForm()添加</form>标记,是因为我知道随处理的普通语句会在标记处理后添加标记。
我如何正确返回由生成的表格.BeginForm?
我偶然发现ASP.Net MVC的一个非常奇怪的情况,传递一个"id"作为动作参数和一个"id"隐藏的表单元素.我有一个具有"id"参数的动作.此id值表示项目.我有一个控制器操作,我正在创建一个数据输入表单,用于将员工分配给传入的项目(我创建一个下拉列表,管理员选择要分配给传递项目的员工).通过将员工分配给项目,我创建了一个ProjectEmployee记录(项目ID,员工ID和表示组合的ID,该组合是数据库中的标识列).标识列(名为"id")也是隐藏的表单元素.这是必要的,因为我需要能够在以后编辑项目/员工分配.
无论如何,在为项目创建新的员工分配时,项目ID(传递给操作的"id")将应用于"id"隐藏的表单元素.
我正在通过117行动.117是projectId.它被设置为"id"隐藏字段,该字段应该为0,因为0表示新项目/员工的分配.
查看模型
id - unique id that represents the Project/Employee combination
projectId - the "Id" being passed to action
EmployeeId - what the admin is selecting from drop down
rate
startdate
endDate
...
Run Code Online (Sandbox Code Playgroud)
数据输入表格
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.ProjectId)
...
Id: @Model.Id <br />
ProjectId: @Model.ProjectId<br />
Run Code Online (Sandbox Code Playgroud)
因此,@ Html.HiddenFor(m => m.Id)呈现隐藏的表单元素,其值为117. @ Model.Id将0呈现给UI.单步执行代码我可以在视觉上看到Id属性的值为0.为什么HiddenFor会将它的线交叉并拉出117的值?
这个bug已经进入了生产阶段,所以我手上的数据搞得一团糟,因为我没有在数据库表中创建新记录,而是实际更新了现有记录,因为"Id"属性被错误地设置了从0(表示新记录)到117(这是projectId),因此我正在更新不同的记录.
@Html.LabelFor(model => model.updateDate)
Run Code Online (Sandbox Code Playgroud)
但这被转换为<label for="updateDate">updateDate</label>,并且值不会只显示updateDate.我该如何显示该值?
我正在尝试修改此代码:http: //www.codeproject.com/Articles/260470/PDF-reporting-using-ASP-NET-MVC3 使其获取ViewBag数据以呈现PDF中的视图.
基本上,我需要使用新的Context我的ViewBag传递给Html.RenderPartial,现在的代码是:
Html.RenderPartial(viewName, model);
Run Code Online (Sandbox Code Playgroud)
而我正在尝试将其更改为:
Html.RenderPartial(viewName, model, new ViewDataDictionary(ViewBag));
Run Code Online (Sandbox Code Playgroud)
我没有得到任何错误,但字典保持空白.
BR
您好我有以下问题:我试图通过表单将模型发布到其他控制器操作.但是收到的模型只填充了"null"元素.

ToolController.cs
public class ToolController : Controller
{
public ActionResult Index()
{
var Model = new EditToolModel{ /* Some data */ };
return View(Model);
}
[HttpPost]
public ActionResult EditToolOverview(EditToolModel myModel)
{
return RedirectToAction("Index", "Tool", new { show = "overview" });
}
}
Run Code Online (Sandbox Code Playgroud)
EditToolModel.cs
public class EditToolModel
{
public Tools tool;
public IEnumerable<Tools> tools { get; set; }
public ToolsExtention tool_extention;
public string latest_version { get; set; }
public string latest_version_type { get; set; }
public string latest_devStep { get; set; …Run Code Online (Sandbox Code Playgroud)