سؤال

وبما أنني قررت السماح RC الذهاب في حين أن البقاء مع بيتا في الوقت الراهن، ليس لدي أي وسيلة لمعرفة ما إذا كان قد تم إضافة RedirectToAction كتابة بشدة. لديها أي شخص جربوه وهناك RedirectToAction كتبته بقوة (وربما ActionLink) في RC؟

هل كانت مفيدة؟

المحلول

لا، لم يحدث ذلك.

protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action, RouteValueDictionary values) where T : Controller
{
    var body = action.Body as MethodCallExpression;

    if (body == null)
    {
        throw new ArgumentException("Expression must be a method call.");
    }

    if (body.Object != action.Parameters[0])
    {
        throw new ArgumentException("Method call must target lambda argument.");
    }

    string actionName = body.Method.Name;

    var attributes = body.Method.GetCustomAttributes(typeof(ActionNameAttribute), false);
    if (attributes.Length > 0)
    {
        var actionNameAttr = (ActionNameAttribute)attributes[0];
        actionName = actionNameAttr.Name;
    }

    string controllerName = typeof(T).Name;

    if (controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
    {
        controllerName = controllerName.Remove(controllerName.Length - 10, 10);
    }

    RouteValueDictionary defaults = LinkBuilder.BuildParameterValuesFromExpression(body) ?? new RouteValueDictionary();

    values = values ?? new RouteValueDictionary();
    values.Add("controller", controllerName);
    values.Add("action", actionName);

    if (defaults != null)
    {
        foreach (var pair in defaults.Where(p => p.Value != null))
        {
            values.Add(pair.Key, pair.Value);
        }
    }

    return new RedirectToRouteResult(values);
}

وهذا يجب أن تعمل.

نصائح أخرى

وأيضا يتم تضمين هذا في MVC Contrib كطريقة تمديد على جهاز تحكم، جنبا إلى جنب مع الكثير من غيرها من الأشياء الجيدة كتبته بقوة لمعالجة ModelState، والاختبار، وما إلى ذلك أنها تستحق أخذ على الاعتماد اضافية لما يقدم.

ويمكنك استخدام return RedirectToAction(nameof(Index));

إذا كنت لا تريد المكتبة MvcContrib الكاملة، يمكنك الحصول على هذه الميزة فقط باستخدام MvcNavigationHelpers حزمة NuGet.

scroll top