Расширение mvc с двумя входами

1

Здесь я пытался сделать расширение с двойными полями ввода

возвращаемые свойства модели равны нулю, они неправильно связаны или есть другая проблема здесь, пожалуйста, помогите мне написать это расширение и использовать его. Мне нужно использовать тысячи его во время моего кода.

public static class DoubleBoxHelper
{
    public static MvcHtmlString DoubleBoxFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper,
        //int id, 
        Expression<Func<TModel, TProperty>> expression)
    {
        var builder = new StringBuilder();
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        var model = metadata.Model as DoubleNumber;
        var name = ExpressionHelper.GetExpressionText(expression);
        var fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        var fieldId = TagBuilder.CreateSanitizedId(fullName);

        // 1st TextBox
        var tagInputLeft = new TagBuilder("input");
        tagInputLeft.Attributes.Add("name", fullName);
        tagInputLeft.Attributes.Add("id", fieldId + 1);
        tagInputLeft.Attributes.Add("type", "text");
        tagInputLeft.Attributes.Add("value", model.Num1 == null ? "" : model.Num1.ToString());

        // 2nd TextBox
        var tagInputRight = new TagBuilder("input");
        tagInputRight.Attributes.Add("name", fullName);
        tagInputRight.Attributes.Add("id", fieldId + 2);
        tagInputRight.Attributes.Add("type", "text");
        tagInputRight.Attributes.Add("value", model.Num2 == null ? "" : model.Num2.ToString());

        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        return new MvcHtmlString(builder.ToString());
    }
}

Модельный класс

public class DoubleNumber
{
    public int Num1 { get; set; } // tried strings but again they are null
    public int Num2 { get; set; }
}

И вот действие контроллера -Post, в котором нам нужны введенные числа

[HttpPost]
public ActionResult Index(DoubleNumber g)
{
    int iNum1 = g.Num1; // int or string doesn't matter, it couldn't get the entered(modified) model
    int iNum2 = g.Num2;
    var vm = ViewModelOf(g);
    return View(vm);
}
Теги:
asp.net-mvc
asp.net-mvc-5
html-helper

1 ответ

2
Лучший ответ

Вероятно, вам просто проще использовать шаблон редактора:

Views\Shared\EditorTemplates\DoubleNumber.cshtml

@model DoubleNumber
@Html.TextBoxFor(m => m.Num1)
@Html.TextBoxFor(m => m.Num2)

Затем, на ваш взгляд:

@Html.EditorForModel()

Или, если у вас есть свойство типа DoubleNumber на модели представления:

@Html.EditorFor(m => m.MyDoubleNumberProperty)
  • 0
    Это нормально, я думаю +1, это может быть похоже на подход PartialView, но что, если вы делаете библиотеку многократного использования и пытаетесь использовать некоторую похожую логику в качестве элемента управления, также я пытаюсь найти то, что я пропустил здесь, пожалуйста, рассмотрите альтернативный способ также, спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню